クラス B は、tellAttribute()
次のように呼び出されるパブリック関数を定義します。
public function tellAttribute(){
echo $this->attribute;
}
次に、クラス A (クラス B の子) をインスタンス化し、次のようにします。
$test = new A();
$test->tellAttribute();
したがって、クラスのオブジェクトをインスタンス化してから、このオブジェクトA
を呼び出しtellAttribute()
ます。tellAttribute()
メソッドは$this
変数を使用するため、インスタンス化した実際のオブジェクトを参照しています。tellAttribute()
クラス(親) で定義したとしても、実際には publicプロパティB
を持つ子オブジェクト ( class のインスタンス) を指しています。それが印刷され、使用する必要がない理由です。A
$attribute
foo
static::
一方、次のことを考慮してください。
class B {
public static $attribute = 'foo';
public function tellAttribute(){
echo self::$attribute; // prints 'foo'
}
public function tellStaticAttribute() {
echo static::$attribute; // prints 'bar'
}
}
class A extends B {
public static $attribute = 'bar';
}
$test = new A();
$test->tellAttribute();
print "<BR>";
$test->tellStaticAttribute();
この例では、$this
変数を使用せず、代わりに and を使用self::
していますstatic::
。は常に を出力しtellAttribute()
ます。これは、現在のクラスしか参照できないためです。クラスを「動的に」使用して出力します。私は技術用語などにあまり詳しくないので、マニュアルへのリンクを残します (投稿から既に読んでいると思います): http://php.net/manual/en/language .oop5.late-static-bindings.phpself::
foo
self::
tellStaticAttribute()
static::
それがあなたの質問に答えることを願っています。