0

リフレクションクラスがどのように機能するかを理解しようとしています。

クラスをリフレクションすると、その親からのすべてのメソッド/プロパティがあると期待されます。

例えば

class A
{
  public function foo();
}

class B extends A
{
  public function bar();
}

メソッド 'foo' も B の一部になることを期待しています。

継承ツリーのどこかにメソッドがあるかどうかを確認する正しい方法は何ですか?

私の問題は、コンストラクターのチェックにあります。一部の子はコンストラクト メソッドを実装していません。コンストラクト メソッドが継承によって反映されることを期待していました。

前もって感謝します!

4

2 に答える 2

0

getConstructor()で動作します:

class A
{
   public function __construct(){}
   public function foo(){}
}

class B extends A
{
   public function bar(){}
}

$class = new ReflectionClass('B');
$constructor = $class->getConstructor();
var_dump($constructor);

//object(ReflectionMethod)#2 (2) { ["name"]=> string(11) "__construct" ["class"]=> string(1) "A" }
于 2013-06-13T18:00:01.250 に答える
0

確かに、リフレクションを使用する必要はありませんか?あなたはただ使うことができますmethod_exists

$object = new B();
if (method_exists($object, 'foo')) {
    //Do something
}
于 2013-06-13T18:00:10.700 に答える