Intereting Posts
Войдите в систему программно и оставайтесь в системе SQL-дизайн и / или класс PHP для хранения динамических двумерных массивов? Предупреждение: mysql_real_escape_string (): доступ запрещен для пользователя '' @ 'localhost' (с использованием пароля: НЕТ) Преобразование анонимной функции в PHP 5.3 в эквивалент PHP 5.2 Как установить часовой пояс базы данных в application.ini Преобразование boolean в целочисленное значение php Codeigniter – данные сеанса не сохраняются в базе данных через массив читать xml-файл с php Последовательность escape-последовательности Newline, не работающая на php Как вызвать метод __invoke переменной-члена внутри класса Функция base_url () не будет работать на страницах ошибок. Даже после автозагрузки Использование mysql для addlashes () Как я могу получить доступ к роли пользователя в классе Form Builder в Symfony2 Проблема с MySQL localhost / 127.0.0.1 Сохранение входных данных в текстовом файле

Доступ к нестатической функции класса в PHP

Почему это законно в 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 перестанет позволять вам это делать.

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