1

この例では、期待どおりに致命的なエラー「致命的なエラー:オブジェクトコンテキストにないときに$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()メソッドの定義から静的キーワードを削除してもすべて正常に機能する場合は、なぜですか?

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違法になります。

staticのドキュメントを参照してください。

于 2012-09-06T20:49:11.750 に答える