php之带别名的动态命名空间类
所以,
我对使用 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.
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。