PHP: вызов метода экземпляра через синтаксис ClassName :: method приводит к статическому вызову?

Это мой код:

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 для вызова статических методов статически (как вы это делали).