首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用命名空间从动态类获取常量

问无法使用命名空间从动态类获取常量
EN

Stack Overflow用户
提问于 2011-10-05 22:51:55
回答 1查看 970关注 0票数 3

我无法从使用字符串变量和PHP5.3定义的类中获取常量。命名空间。示例:

代码语言:javascript
复制
use \Some\Foo\Bar;

$class = 'Bar';
echo $class::LOCATION;

其中LOCATION是正确定义的常量。我得到的错误是类栏未定义。

如果我这么做了

代码语言:javascript
复制
$class = "\Some\Foo\Bar";

一切都很好。

有没有办法让第一个例子起作用呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-05 23:02:31

使用$class::CONST获取类常量时,要求$class包含独立于当前命名空间的完全限定的类名。

use语句在这里没有帮助,即使您在名称空间\Some\Foo中,以下内容也不会起作用:

代码语言:javascript
复制
namespace \Some\Foo;

$class = 'Bar';
echo $class::LOCATION;

正如您已经在问题中所写的,通过提供完全限定的类名,您找到了一个“解决方案”:

代码语言:javascript
复制
use \Some\Foo\Bar;

$class = "\Some\Foo\Bar";
echo $class::LOCATION;

但是,您不喜欢这样。我不知道你有什么特别的问题,但大体上看起来还不错。如果您想在当前名称空间中解析Bar的完全限定类名,您可以只实例化它的一个对象并访问常量:

代码语言:javascript
复制
use \Some\Foo\Bar;

$class = new Bar;
echo $class::LOCATION;

在这个阶段,您甚至不需要关心您所在的名称空间。

但是,如果出于某种原因需要在全局名称空间中有一个名为Bar的类,则可以使用class_alias使其正常工作。用它来代替use \Some\Foo\Bar来获得你想要的行为:

代码语言:javascript
复制
class_alias('\Some\Foo\Bar', 'Bar');

$class = 'Bar';
echo $class::LOCATION;

但不管怎样,我可能不会理解你的问题,因为你已经有的解决方案在我看来很好。也许你可以写下你的具体问题是什么。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7663270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档