我无法从使用字符串变量和PHP 5.3定义的类中获取常量。命名空间。例如:
use \Some\Foo\Bar;
$class = 'Bar';
echo $class::LOCATION;
其中LOCATION是一个正确定义的常量。我得到的错误说类Bar是未定义的。
如果我改为
$class = "\Some\Foo\Bar";
一切正常。
有没有让第一个例子有效?
答案 0 :(得分:4)
使用$class::CONST
获取类常量,$class
必须包含独立于当前名称空间的完全限定类名。
use
语句对此没有帮助,即使您在命名空间\Some\Foo
中,以下操作也无效:
namespace \Some\Foo;
$class = 'Bar';
echo $class::LOCATION;
正如您在问题中所写,您已通过提供完全限定的类名找到了“解决方案”:
use \Some\Foo\Bar;
$class = "\Some\Foo\Bar";
echo $class::LOCATION;
但是,你不喜欢这个。我不知道你的具体问题,但一般看起来很好。如果要在当前命名空间中解析Bar
的完全限定类名,可以实例化其对象并访问常量:
use \Some\Foo\Bar;
$class = new Bar;
echo $class::LOCATION;
在这个阶段,您甚至不需要关心自己的名称空间。
但是,如果由于某种原因需要在全局命名空间中有一个名为Bar
的类,则可以使用class_alias
使其工作。用它代替use \Some\Foo\Bar
以获得您想要的行为:
class_alias('\Some\Foo\Bar', 'Bar');
$class = 'Bar';
echo $class::LOCATION;
但无论如何,我可能不会得到你的问题,因为你已经拥有的解决方案对我来说很好。也许你可以写出你的具体问题。