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

Php 使用包含常量名称的简单变量访问类常量,php,class,variables,constants,Php,Class,Variables,Constants,我正在尝试访问我的一个类中的类常量: const MY_CONST = "value"; 如果我有一个变量,它包含这个常量的名称,如下所示: $myVar = "MY_CONST"; 我可以以某种方式访问我的_CONST的值吗 self::$myVar 显然不起作用,因为它用于静态属性。 变量也不起作用。您试过了吗 $myVar = MY_CONST or $myVar = $MY_CONST 我可以以某种方式访问我的_CONST的值吗 self::$myVar 如果要动态访问,可以使

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

const MY_CONST = "value";
如果我有一个变量,它包含这个常量的名称,如下所示:

$myVar = "MY_CONST";
我可以以某种方式访问我的_CONST的值吗

self::$myVar
显然不起作用,因为它用于静态属性。 变量也不起作用。

您试过了吗

$myVar = MY_CONST or $myVar = $MY_CONST
我可以以某种方式访问我的_CONST的值吗

self::$myVar
如果要动态访问,可以使用:

反射API的好处是可以一次获取所有常量(
getConstants

如果您不喜欢反射API,因为您不想使用它,那么另一种选择是
常量
函数():


没有相应的语法,但可以使用显式查找:

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

我相信它也适用于
self::

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

常数函数 常量函数使用通过
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

只需注意一点:ReflectionClass的构造函数必须为其参数接收类的完整路径。 这意味着在某些情况下,仅将字符串“A”设置为构造函数参数可能不起作用

为了避免此问题,在使用ReflectionClass时,如果执行以下操作,您会做得更好:

$classA = new A();
$name_classA = get_class($classA);
$ref = new ReflectionClass(get_class($name_classA));
$constName = 'MY_CONST';
echo $ref->getConstant($constName);

函数get_class将在代码中提供类的完整路径。缺少完整路径可能会导致“未找到类”PHP错误。

我不知道将访问哪个常量。常量的名称在运行时计算并放入$myVar中。所以这是行不通的。我不想用反射来实现这一点。有多种方法可以实现同样的效果,签出-对类常量也有效。如果我的常量有一个特性,而一个类实现了这个特性,如何解决这个问题?使用“打印”让我困惑了一秒钟,因为这不是解决方案的一部分,但是是的,使用
constant()
函数似乎是最好的方法。如果类位于不同的路径上,则有必要指定类名称空间。
$ref = new ReflectionClass('A');
$constName = 'MY_CONST';
echo $ref->getConstant($constName); // output: myval
$classA = new A();
$name_classA = get_class($classA);
$ref = new ReflectionClass(get_class($name_classA));
$constName = 'MY_CONST';
echo $ref->getConstant($constName);