PHP: вызов метода экземпляра через синтаксис ClassName :: method, приводит к статическому вызову? - PullRequest
1 голос
/ 12 января 2011

Это мой код:

class MyClass 
{
   public $prop;
   public function method ()
   {
     echo $this->prop;
   }
}

Тогда где-то в коде, случайно:

MyClass::method();

Я ожидаю, что произойдет ошибка в интерпретации вышеупомянутой строки, потому что вызываемый метод не является статическим. Вместо этого был вызван метод, и я получил исключение о том, что $ prop не существует. Итак, я понимаю, что метод был вызван как статический метод, хотя это не так.

Так ли это работает? (Какого черта?)

Ответы [ 2 ]

4 голосов
/ 12 января 2011

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

http://php.net/manual/en/language.oop5.static.php

Полагаю, у вас подавлены предупреждения E_STRICT. Это работает (вероятно, по старым причинам), но не рекомендуется.

4 голосов
/ 12 января 2011

По старым причинам любой метод класса может вызываться статически, даже если он не был объявлен static, поскольку ранее вы не могли объявить их как таковые.В этих случаях $this просто ссылается на ничего, потому что это не переменная объекта-контекста.

В PHP 5 вы получаете предупреждение E_STRICT для статического вызова нестатических методов (как вы только что сделали).

...