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

Ограничения 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