static的奇怪::调用包含$ this的方法

时间:2012-09-06 20:46:15

标签: php static this self

在这个例子中,我得到致命错误“致命错误:在不在对象上下文中时使用$ this”

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)

2 个答案:

答案 0 :(得分:1)

根据定义,静态函数不需要实例化类,因此它无法访问指向当前实例的$this->引用。如果实例不存在,则无法指向它。说得通。

答案 1 :(得分:0)

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

ctis_parent::call();

在哪里,$this将是非法的。

请参阅docs for static