Позднее статическое связывание
18 декабря 2017Позднее статическое связывание появилось в PHP 5.3.
Рассмотрим пример:
class Cat
{
public static function who()
{
echo __CLASS__;
}
public static function test()
{
self::who();
}
}
class BlackCat extends Cat
{
public static function who()
{
echo __CLASS__;
}
}
class WhiteCat extends Cat
{
public static function who()
{
echo __CLASS__;
}
}
BlackCat::test();
WhiteCat::test();
Результат выполнения кода:
Cat
Cat
Изменим только 8 строку кода с self::who() на static::who():
class Cat
{
public static function who()
{
echo __CLASS__;
}
public static function test()
{
static::who();
}
}
class BlackCat extends Cat
{
public static function who()
{
echo __CLASS__;
}
}
class WhiteCat extends Cat
{
public static function who()
{
echo __CLASS__;
}
}
BlackCat::test();
WhiteCat::test();
Результат выполнения кода:
BlackCat
WhiteCat
Обращение через static вычисляется по отношению к классу, не в котором метод определен, а на основе информации в процессе исполнения кода.