2011-01-12 58 views
1

她是我的代码:PHP:通过ClassName :: method语法调用实例方法,会导致静态调用?

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

然后某处代码,意外:

MyClass::method(); 

我会希望有关于上述行的解释错误,因为调用的方法也不是一成不变的。相反,该方法被调用,并且我收到了$ prop不存在的异常。所以我明白,该方法被称为静态方法,即使它不是。

是否以这种方式工作? (凭啥?)

+0

检查你的错误报告,他们可能只是被隐藏,寻找附近的主文件的error_log中。 – RobertPitt 2011-01-12 01:21:26

回答

4

遗留原因,任何类方法可以静态调用,即使它没有宣布static,因为你以前无法把他们定义为这样的。在这种情况下,$this只会是指什么,因为它不是一个对象的上下文变量。

在PHP 5中,你得到一个E_STRICT警告调用非静态方法静态(因为你只是做了)。