SO,
我在使用命名空间创建动态对象时遇到问题。 这是名称空间代码:
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版本。
答案 0 :(得分:5)
只有解析器使用您的命名空间别名来规范化每个文件中的类引用。
换句话说,它没有引入其他代码可以使用的某种全局别名。解析完脚本后,将不再使用别名。
中也描述了此行为导入在编译时执行,因此不会影响动态类,函数或常量名称。