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

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

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