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).
精彩评论