我无法从使用字符串变量和PHP5.3定义的类中获取常量。命名空间。示例:
use \Some\Foo\Bar;
$class = 'Bar';
echo $class::LOCATION;其中LOCATION是正确定义的常量。我得到的错误是类栏未定义。
如果我这么做了
$class = "\Some\Foo\Bar";一切都很好。
有没有办法让第一个例子起作用呢?
发布于 2011-10-05 23:02:31
使用$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;但不管怎样,我可能不会理解你的问题,因为你已经有的解决方案在我看来很好。也许你可以写下你的具体问题是什么。
https://stackoverflow.com/questions/7663270
复制相似问题