Давайте начнем с некоторого кода:
class Super {
protected static $color;
public static function setColor($color){
self::$color = $color;
}
public static function getColor() {
return self::$color;
}
}
class ChildA extends Super { }
class ChildB extends Super { }
ChildA::setColor('red');
ChildB::setColor('green');
echo ChildA::getColor();
echo ChildB::getColor();
Теперь поздняя статическая привязка в PHP 5.3 с использованием ключевого слова static прекрасно работает со статическими методами, поэтому я предположил, что она будет использовать то же самое для статических переменных. Ну, кажется, нет. В приведенном выше примере печатается не «красный», а затем «зеленый», как я и ожидал, но «зеленый» и «зеленый». Почему это не работает с переменными, когда работает с методами? Есть ли другой способ добиться ожидаемого эффекта?