PHP:使用Reflection API获取属性默认值常量名称

时间:2017-05-31 14:24:16

标签: php reflection

我需要能够检索属性默认值常量名称。 例如,有这样的类:

class Foo
{
    const BAR = 'BAR';
    private $baz = self::BAR;
}

我希望能够做到以下几点:

$reflection = new \ReflectionClass(Foo::class);
$reflection->getProperty('baz')->getDefaultValueConstantName(); // 'Foo::BAR'

PHP Reflection API的一个奇怪之处是\ReflectionParameter类有方法getDefaultValueConstantName(),但\ReflectionProperty没有。我可以使用\ReflectionClass::getDefaultProperties()获取属性默认值,但此方法将返回属性默认值,而不是此值取自的常量名称。 是否有任何解决方案来获取属性默认值常量名称,并且此功能是否至少计划用于下一版本的PHP?

1 个答案:

答案 0 :(得分:0)

这似乎不可能。

当您执行private $baz = self::BAR;时,您指定(仅)常量self :: BAR的值,而不是引用。在此之后,反射无法知道价值的来源。

如果你真的想知道这一点,你可以使用注释(文档评论)并通过反思来检索它们。