Позднее статическое связывание
Ограничения self::
<?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
Использование позднего статического связывания
<?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
В нестатическом контексте вызванным классом будет тот, к которому относится экземпляр объекта. Поскольку $this→ будет пытаться вызывать закрытые методы из той же области действия, использование static:: может дать разные результаты. Другое отличие в том, что static:: может ссылаться только на статические поля класса.
Подробно: http://ru2.php.net/manual/ru/language.oop5.late-static-bindings.php