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

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

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 вычисляется по отношению к классу, не в котором метод определен, а на основе информации в процессе исполнения кода.