1

リフレクションを使用して、PHP のクラスによって定義された定数のリストを取得したいと考えています。

現在、リフレクションを使用して定数のリストを取得できますが、これには継承されたクラスで宣言されたものも含まれます。どちらにも使用できる方法はありますか;

  • クラスを指定して、そのクラスで定義された定数のみを取得します
  • 定数とクラスが与えられた場合、その定数がそのクラス (継承または拡張された親ではない) によって定義されているかどうかを確認します。

たとえば、次のコードでは:

class Foo {
    const PARENT_CONST = 'parent';
    const ANOTHER_PARENT_CONST = 'another_parent';
}

class Bar extends Foo {
    const CHILD_CONST = 'child';
    const BAR_CONST = 'bar_const';
}

$reflection = new ReflectionClass('Bar');
print_r($reflection->getConstants());

出力は次のとおりです。

Array
(
    [CHILD_CONST] => child
    [BAR_CONST] => bar_const
    [PARENT_CONST] => parent
    [ANOTHER_PARENT_CONST] => another_parent
)

しかし、私はこれだけを持ちたいです:

Array
(
    [CHILD_CONST] => child
    [BAR_CONST] => bar_const
)
4

1 に答える 1

3

デフォルトでは、PHPには、親クラスとインターフェイス定数がすでに削除されていることを認識している関数はありません。したがって、それを自分で行う必要があります。

$reflection = new ReflectionClass('Bar');
$buffer = $reflection->getConstants();
foreach (
    array($reflection->getParentClass())
    + $reflection->getInterfaces()
    as $fill
) {
    $buffer = array_diff_key($buffer, $fill->getConstants());
}

結果$bufferは、探している配列です。

Array
(
    [CHILD_CONST] => child
    [BAR_CONST] => bar_const
)
于 2012-08-06T00:10:42.373 に答える