当我的文件被命名空间时,我无法在PHP中动态实例化类。PHP似乎完全忽略了我文件上的use
关键字,因为我试图根据变量的值动态实例化类。
在动态实例化类时,除了硬编码命名空间之外,是否有一个好的解决方案?
这里有一些快速的例子来说明我的意思:
代码new two('one')
;在包含以下两个文件的情况下,无法找到class 1:
File1:
namespace uno;
use dos;
class one {
function __construct($what) {
new $what;
}
}
File2:
namespace dos;
class two { }
文件3:
new one('two'); // Doesn't work!
完全限定
new unoone('two');
或由use
use unoone;
new one('two');
或(相对)限定的(但这对于一级名称空间来说没有多大意义)
use uno;
new unoone('two');
使用更深的命名空间更有意义
use pathtomyNamespace;
new myNamespacefooBarClass;
或者放到同一个命名空间
namespace uno;
new one('two');
见http://php.net/language.namespaces.rules