Познее статическое связывание

Рассмотрим испрользование static для позднего статического связывания в PHP 5.3+ на примере следующих классов.

class A
{
protected static $val = ‘A’;
public static function get_name()
{
print self::$val.’<br />’;
}
}

class B extends A
{
protected static $val = ‘B’;
}
A::get_name(); // выведет ‘A’
B::get_name(); // выведет ‘A’

Для того что бы B::get_name(); напечатало ‘B‘, нужно в классе A заменить sefl на static, то есть в результате наш первоночальный код осменится на :

class A
{
protected static $val = ‘A’;
public static function get_name()
{
print static::$val.’<br />’;
}
}

class B extends A
{
protected static $val = ‘B’;
}
A::get_name(); // выведет ‘A’
B::get_name(); // выведет ‘B’

Метки: ,

Добавить комментарий