php之带别名的动态命名空间类

me-sa 阅读:31 2024-09-07 23:24:14 评论:0

所以,

我对使用 namespace 创建动态对象有疑问。 这是命名空间代码:

namespace Foo 
{ 
   class Bar 
   { 
   } 
} 

现在,我正在尝试创建类 Bar 的对象:

include('namespace.php'); 
$sName  = 'Bar'; 
$sClass = '\\Foo\\'.$sName; 
$rObj   = new $sClass; //correct object 

一切顺利。但是,现在我想使用别名并做类似的事情:

include('namespace.php'); 
use Foo as Baz; 
$sName  = 'Bar'; 
$sClass0= '\\Foo\\'.$sName; 
$sClass1= '\\Baz\\'.$sName; 
$rObj   = new $sClass0; //correct object 
$rObj   = new $sClass1; //Fatal error 

而且我无法以这种方式实例化对象(并且通过全名访问仍然有效)。 所以,我的问题是 - 是否可以通过别名以某种方式访问​​该类,如果可以,如何访问?我还尝试在使用 $sClass1='Baz\\'.$sName 时访问 - 没有成功。此外,我已经通过 get_declared_classes() 函数检查了声明的类,它表明我只有 \Foo\Bar 类(没有引用别名)。

我不确定它是否重要,但我使用的是 PHP 5.5 版本。

请您参考如下方法:

只有解析器使用您的命名空间别名来规范化每个文件中的类引用。

换句话说,它没有引入其他代码可以使用的某种全局别名。一旦您的脚本被解析,就不再使用别名。

the manual 中也描述了此行为:

Importing is performed at compile-time, and so does not affect dynamic class, function or constant names.


标签:PHP
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号