2011-11-26 16 views
13

でクラスを拡張します。子クラスは親クラスを拡張します。ですから、ある時点で私が子供をインスタンス化するとき、私は親が何を呼び出すかを知る必要があります。GET親は私がOOPのPHPコードを持っているPHP

例えば機能b::test()は、私は私のクラスbから(私のコードから)クラスaを取得できますかa

を返すのだろうか?

おかげ

+4

がこれを読んで:http://stackoverflow.com/questions/506705/php-get-classname-from-static-call-in-extended-class –

答えて

16

あなたのコードでは、実際に必要なものがparentであることが示唆されました。問題は、魔法の__CLASS__変数にあります。

documentation状態:それが宣言されました。この定数を返すクラス名としてPHP 5のよう

クロードはあなたではなく、そのクラスを持っているかどう__CLASS__は常に、それが呼ばれていることをクラスが含まれていることを指摘:php.netにthis commentに述べたように、我々は必要なものですが、

このメソッドはget_class($ this)を代わりに使用します。ただし、これはインスタンスでのみ動作し、静的に呼び出された場合には動作しません。

親クラスだけが必要な場合は、それも関数です。

代わり

parent::__CLASS__; 

使用

$ref = new ReflectionClass($this); 
echo $ref->getParentClass()->getName(); 
15

あなたは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)を使用してください。

10

と呼ばれています。それは親の配列を与えるでしょう。

<?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 
11
class a { 
    // with propertie and functions 
} 

class b extends a { 

    public function test() { 
     echo get_parent_class($this); 
    } 
} 


$b = new b(); 
$b->test(); 
6

利用代わりclass_parentsの:その1は、あなたがそれを行うためにリフレクションを使用することができますget_parent_class

関連する問題