Posts Tagged ‘PHP6’

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

Posted in PHP on March 13th, 2008 by Yaroslav Vorozhko – Be the first to comment

Недавно наткнулся на интересную Late Static Bindings Explained, описывающую новую возможность OOP в PHP6, так называемое Late Static Binding (LSB).

Позднее статическое связывание также стало доступно, начиная с версии PHP 5.3.

Зачем нужен LSB

Сейчас, статическая ссылка на текущий класс, такая как self или __CLASS__ распознается используя класс в которому текущая функция принадлежит, например:

<?php
class A {
public static function who() {
     echo __CLASS__;
}
public static function test() { 
    self::who();
}
}
class B extends A {
public static function who() {
     echo __CLASS__;
}
}
B::test(); // A
?>

LSB пытается решить эту проблему используя новое ключевое слово static::, которое будет ссылкой на тот класс, который был вызван в текущий момент времени.

<?php
class A {
public static function who() {
     echo __CLASS__;
}
public static function test() { 
    static::who();
}
}
class B extends A {
public static function who() {
     echo __CLASS__;
}
}
B::test(); // B
?>

Такая конструкция вызовет метод A::test, но static:: будет ссылаться на класс B, при не статическом связывании, будет выщван метод A::who, так как $this-> следует правилал наследования, а static:: нет.

Примеры

Наиболее распостраненный случай:

read more »