【发布时间】:2011-11-22 07:41:51
【问题描述】:
我正在尝试访问我的一个类中的类常量:
const MY_CONST = "value";
如果我有一个像这样保存这个常量名称的变量:
$myVar = "MY_CONST";
我能以某种方式访问 MY_CONST 的值吗?
self::$myVar
显然不起作用,因为它适用于静态属性。 变量变量也不起作用。
【问题讨论】:
标签: php class variables constants
我正在尝试访问我的一个类中的类常量:
const MY_CONST = "value";
如果我有一个像这样保存这个常量名称的变量:
$myVar = "MY_CONST";
我能以某种方式访问 MY_CONST 的值吗?
self::$myVar
显然不起作用,因为它适用于静态属性。 变量变量也不起作用。
【问题讨论】:
标签: php class variables constants
Reflection 的注意事项: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 错误。
【讨论】:
有两种方法可以做到这一点:使用constant 函数或使用reflection。
常量函数适用于通过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
【讨论】:
你试过了吗
$myVar = MY_CONST or $myVar = $MY_CONST
【讨论】:
我能以某种方式访问 MY_CONST 的值吗?
self::MY_CONST
如果要动态访问,可以使用reflection API Docs:
$myvar = 'MY_CONST';
$class = new ReflectionClass(self);
$const = $class->getConstant($myVar);
反射 API 的好处是您可以一次获取所有常量 (getConstants)。
如果您因为不想使用反射 API 而不喜欢它,可以使用 constant 函数 (Demo):
$myvar = 'MY_CONST';
class foo {const MY_CONST = 'bar';}
define('self', 'foo');
echo constant(self.'::'.$myvar);
【讨论】:
没有语法,但您可以使用显式查找:
print constant("classname::$myConst");
我相信它也适用于self::。
【讨论】:
constant() 函数似乎是最好的方法。