当前位置: 动力学知识库 > 问答 > 编程问答 >

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

问题描述:

Her is my code:

class MyClass

{

public $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).

分享给朋友:
您可能感兴趣的文章:
随机阅读: