Почему это законно в PHP?
<?php class Foo { public function test() { echo "hello\n"; } } Foo::test(); ?>
test () является нестатической функцией, но я могу получить к ней доступ без экземпляра.
Я считаю, что это связано с обратной совместимостью. В PHP4 у вас не было статического ключевого слова для методов (по-прежнему ищут ссылки, но пока это все, что я нашел http://us2.php.net/manual/en/language.oop5.static.php ) , Таким образом, код PHP4 может работать без проблем.
Лучше всего объявлять свои статические функции как таковые, и если вы включите E_STRICT, вы увидите уведомление об этом.
error_reporting(E_ALL | E_STRICT);
Обновление : хорошо, это лучшее, что я нашел http://bugs.php.net/bug.php?id=34990 и http://bugs.php.net/bug.php?id=47891 .
Это законно, но, как правило, нахмурился, пока вы не ссылаетесь на $this
в своем статически называемом методе, который вызовет фатальную ошибку.
Из руководства PHP :
Вызов нестатических методов статически генерирует предупреждение уровня E_STRICT.
Это работает, потому что вы не включили уровень ошибки E_STRICT . После включения PHP перестанет позволять вам это делать.
Я не верю, что вы можете получить доступ к методу класса без экземпляра объекта.