Почему интерпритатор PHP не ругается при вызове не статической функции без создания экземпляра класса?

Всегда считал, что при попытке вызова не статической функции без создания экземпляра класса в PHP приложение должно отваливаться с ошибкой. Только что поспорил с коллегой на эту тему. Проверили:

calss A{
     public function b(){
         return 1;
     }
}
echo A::b();


Код успешно вернул 1.

Подскажите, кто знает: как это работает? В чем тогда разница между статическим и не статическим методом? Или это очередная попытка PHP добавить "удобства" программисту и интерпритатор все равно признает метод статическим, если вызывать его как статический?
  • Вопрос задан
  • 2505 просмотров
Решения вопроса 1
disc
@disc
веб-разработчик
Если включить отображение ошибок E_ALL, то вы увидите:
Strict standards: Non-static method A::b() should not be called statically

E_STRICT - это не столько ошибки, сколько советы по правильному кодированию, для предотвращения последующей несовместимости скрипта
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
trerums
@trerums
А вы уверены что должно быть runtime error а не notice/warning?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы