获取PHP中常量的定义类

时间:2012-08-05 23:57:53

标签: php reflection

我想使用反射来获取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
)

1 个答案:

答案 0 :(得分: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
)