Это мой код:
class MyClass { public $prop; public function method () { echo $this->prop; } }
Затем где-то в коде, случайно:
MyClass::method();
Я ожидал бы ошибки интерпретации в указанной выше строке, потому что вызываемый метод не является статическим. Вместо этого метод был вызван, и я получил исключение из $ prop not existing. Поэтому я понимаю, что метод был вызван как статический метод, хотя это не так.
Так ли это работает? (Почему, черт возьми? )
Вызов нестатических методов статически генерирует предупреждение уровня E_STRICT.
http://php.net/manual/en/language.oop5.static.php
Я полагаю, вы предупреждали предупреждения E_STRICT. Он работает (вероятно, по наследству), но это не рекомендуется.
По старым причинам любой метод класса можно было бы назвать статически, даже если он не был объявлен static
, потому что вы ранее не могли объявить их как таковые. В этих случаях $this
просто не будет означать ничего, потому что это не переменная object-context.
В PHP 5 вы получаете предупреждение E_STRICT
для вызова статических методов статически (как вы это делали).