获取定义类在PHP中的常数(Get the defining class for a constan

2019-07-30 19:07发布

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

Answer 1:

默认情况下,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
)


文章来源: Get the defining class for a constant in PHP