Доступ к нестатической функции класса в PHP - PullRequest
3 голосов
/ 18 ноября 2009

Почему это разрешено в PHP?

<?php
class Foo {
    public function test() {
        echo "hello\n";
    }
}

Foo::test();
?>

test () - это нестатическая функция, но я могу получить к ней доступ без экземпляра.

Ответы [ 5 ]

6 голосов
/ 18 ноября 2009

Это законно, но, как правило, осуждается, пока вы не ссылаетесь на $this в своем статически вызываемом методе, который выдаст фатальную ошибку.

5 голосов
/ 18 ноября 2009

Я считаю, что это из-за обратной совместимости. В 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.

2 голосов
/ 18 ноября 2009

Из Руководства PHP :

Статический вызов нестатических методов генерирует предупреждение уровня E_STRICT.

0 голосов
/ 18 ноября 2009

Это работает, потому что вы не включили уровень ошибки E_STRICT . После включения PHP перестанет позволять вам это делать.

0 голосов
/ 18 ноября 2009

Я не верю, что вы можете получить доступ к методу класса без экземпляра объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...