1

In this example I get the fatal error "Fatal error: Using $this when not in object context" as expected

class ctis_parent{
    public function objFunc(){
        var_dump('Called succes');
    }

    public static function call(){

        $this->objFunc(); 
    }

    public function __construct(){
        self::call();
    }

}

new ctis_parent();

But if remove static keyword from definition of call() method all work fine, why?

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)
4

2 回答 2

1

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

于 2012-09-06T20:51:11.607 回答
0

因为您不在$this对象中时使用。好吧,你不是真的,但是使用静态声明,人们可以这样做:

ctis_parent::call();

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

请参阅静态文档

于 2012-09-06T20:49:11.750 回答