使用包含常量名称的简单变量访问类常量

新手上路,请多包涵

我正在尝试访问我的一个类中的类常量:

 const MY_CONST = "value";

如果我有一个变量来保存这个常量的名称,如下所示:

 $myVar = "MY_CONST";

我能以某种方式访问 MY_CONST 的值吗?

 self::$myVar

显然不起作用,因为它用于静态属性。可变变量也不起作用。

原文由 Adam Arold 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 301
2 个回答

有两种方法可以做到这一点:使用 常量 函数或使用 反射

常数函数

常量函数与通过 define 声明的常量以及类常量一起使用:

 class A
{
    const MY_CONST = 'myval';

    static function test()
    {
        $c = 'MY_CONST';
        return constant('self::'. $c);
    }
}

echo A::test(); // output: myval

反射类

第二种更费力的方法是通过反思:

 $ref = new ReflectionClass('A');
$constName = 'MY_CONST';
echo $ref->getConstant($constName); // output: myval

原文由 webbiedave 发布,翻译遵循 CC BY-SA 3.0 许可协议

没有语法,但您可以使用显式查找:

 print constant("classname::$myConst");

我相信它也适用于 self::

原文由 mario 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏