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

Ada*_*old 54 php variables class constants

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

const MY_CONST = "value";
Run Code Online (Sandbox Code Playgroud)

如果我有一个变量,其中包含此常量的名称,如下所示:

$myVar = "MY_CONST";
Run Code Online (Sandbox Code Playgroud)

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

self::$myVar
Run Code Online (Sandbox Code Playgroud)

显然不起作用,因为它是静态属性.变量变量也不起作用.

web*_*ave 124

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

常数功能

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

class A
{
    const MY_CONST = 'myval';

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

echo A::test(); // output: myval
Run Code Online (Sandbox Code Playgroud)

反思课

第二种更费力的方式是反思:

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


mar*_*rio 30

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

print constant("classname::$myConst");
Run Code Online (Sandbox Code Playgroud)

我相信它也适用self::.

  • 使用"print"让我困惑了一秒钟,因为这不是解决方案的一部分,但是,使用`constant()`函数似乎是最好的方法. (2认同)
  • 如果类位于不同的路径上,则似乎有必要指定类命名空间。 (2认同)