static的奇数::调用一个包含$this的方法


Oddity of static:: calling a method that contains $this

在这个例子中,我得到了预期的致命错误"fatal error:Using$this when not In object context"

class ctis_parent{
    public function objFunc(){
        var_dump('Called succes');
    }
    public static function call(){
        $this->objFunc(); 
    }
    public function __construct(){
        self::call();
    }
}
new ctis_parent();

但若从call()方法的定义中移除static关键字都能正常工作,为什么呢?

class ctis_parent{
    public function objFunc(){
        var_dump('Called succes');
    }
    public  function call(){
        $this->objFunc();
    }
    public function __construct(){
        self::call();
    }
}
new ctis_parent(); 
//string 'Called succes' (length=13)

根据定义,静态函数不需要实例化类,因此它无法访问指向当前实例的$this->引用。如果一个实例不存在,就无法指向它。这很有道理。

因为不在对象中时使用$this。嗯,你不是真的,但有了静态声明,人们可以做:

ctis_parent::call();

其中,$this将是非法的。

有关静态,请参阅文档。