开发者

PHP: call to an instance method via ClassName::method syntax, results in a static call?

Her is my code:

class MyClass 
{
   publi开发者_运维知识库c $prop;
   public function method ()
   {
     echo $this->prop;
   }
}

Then somewhere in the code, accidently:

MyClass::method();

I would expect to have an interpretation error about the above line, because the called method is not static. Instead, the method was called, and I received an exception about $prop not existing. So i understand that the method was called as a static method, even though it's not.

Does it work this way? (Why the hell? )


Calling non-static methods statically generates an E_STRICT level warning.

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

I suppose you have E_STRICT warnings suppressed. It works (likely for legacy reasons), but it's not recommended.


For legacy reasons, any class method could be called statically even if it wasn't declared static, because you previously couldn't declare them as such. In those cases, $this would simply refer to nothing because it's not an object-context variable.

In PHP 5 you get an E_STRICT warning for calling non-static methods statically (as you just did).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜