0

最初のケースでは、オブジェクトコンテキストで関数を呼び出しました。2番目のケースでは、クラスコンテキストがあります。親::コンテキストに応じて、このように機能し、同時に自己を機能させますか?

class par_parent{
    private $var='value1';
    private static $val='value2';
    public function call(){
        var_dump('Object '.$this->var);
    }
    public static function staticCall(){
        var_dump('Static '.self::$val);
    }
}

class par_child extends par_parent{
    public function callObj(){
        parent::call();
    }

    public static function callStatic(){
        parent::staticCall();
    }
}



$obj=new par_child();
$obj->callObj();
**//string 'Object value1' (length=13)**
par_child::callStatic();
**//string 'Static value2' (length=13)**
4

1 に答える 1

0

はキーワードparent::のようにバインドself::され、呼び出された場所からではなく、コードごとに定義されたコンテキストを常に参照するため、本質的にはself::キーワードのように機能します。$this提供されている後期静的バインディングの使用のように機能する必要がある場合static::。この例を考えてみましょう。

class A { 
    protected static $v = 'a';
    public static function staticsay() {
        print static::$v;
    }

}
class B extends A { 
    protected static $v = 'b';
    public static function say(){
        print parent::$v;
    }
}
class C extends B { 
    protected static $v = 'c';
    public static function selfsay(){
        print parent::$v;
    }
} 

C::say(); // prints 'a'
C::selfsay(); // prints 'b'
C::staticsay(); // prints 'c'

ここでは、そのsay()メソッドをCクラスから呼び出しているBので、それparent::は平均Aであり、A::$vは「a」であるため、それを出力します。

parent::inCはクラスを指し、それは「b」Bと見なされます。$v

php 5.3には、レイトスタティックバインディングと、ベースクラスのスタティックメソッドstatic::の変数とメソッドにアクセスできるキーワードが付属しているため、クラスからが表示されます。staticA::staticsay$vC

于 2012-09-06T18:43:14.883 に答える