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