でクラスを拡張します。子クラスは親クラスを拡張します。ですから、ある時点で私が子供をインスタンス化するとき、私は親が何を呼び出すかを知る必要があります。GET親は私がOOPのPHPコードを持っているPHP
例えば機能b::test()
は、私は私のクラスbから(私のコードから)クラスa
を取得できますかa
を返すのだろうか?
おかげ
でクラスを拡張します。子クラスは親クラスを拡張します。ですから、ある時点で私が子供をインスタンス化するとき、私は親が何を呼び出すかを知る必要があります。GET親は私がOOPのPHPコードを持っているPHP
例えば機能b::test()
は、私は私のクラスbから(私のコードから)クラスa
を取得できますかa
を返すのだろうか?
おかげ
あなたのコードでは、実際に必要なものがparentであることが示唆されました。問題は、魔法の__CLASS__
変数にあります。
documentation状態:それが宣言されました。この定数を返すクラス名としてPHP 5のよう
。
クロードはあなたではなく、そのクラスを持っているかどう
__CLASS__
は常に、それが呼ばれていることをクラスが含まれていることを指摘:php.netにthis commentに述べたように、我々は必要なものですが、このメソッドはget_class($ this)を代わりに使用します。ただし、これはインスタンスでのみ動作し、静的に呼び出された場合には動作しません。
親クラスだけが必要な場合は、それも関数です。
代わり
parent::__CLASS__;
使用
$ref = new ReflectionClass($this);
echo $ref->getParentClass()->getName();
あなたはget_parent_class
を使用することができます。
class A {}
class B extends A {
public function test() {
echo get_parent_class();
}
}
$b = new B;
$b->test(); // A
B::test
が静的である場合、これも動作します。
注:引数なしでget_parent_class
を使用する場合と、$this
を引数として使用する場合との間には小さな違いがあります。我々が上記の例を拡張する場合:
class C extends B {}
$c = new C;
$c->test(); // A
私たちは、親クラス(メソッドが呼び出されたB、の親クラス)としてA
を取得します。テストするオブジェクトに常に最も近い親が必要な場合は、代わりにget_parent_class($this)
を使用してください。
と呼ばれています。それは親の配列を与えるでしょう。
<?php
class A {}
class B extends A {
}
class C extends B {
public function test() {
echo implode(class_parents(__CLASS__),' -> ');
}
}
$c = new C;
$c->test(); // B -> A
class a {
// with propertie and functions
}
class b extends a {
public function test() {
echo get_parent_class($this);
}
}
$b = new b();
$b->test();
利用代わりclass_parents
の:その1は、あなたがそれを行うためにリフレクションを使用することができますget_parent_class
がこれを読んで:http://stackoverflow.com/questions/506705/php-get-classname-from-static-call-in-extended-class –