PHP:实例化命名空间类


PHP: Instanciating namespaced classes

当我的文件被命名空间时,我无法在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 'uno'one('two');

或由use

定义
use uno'one;
new one('two');

或(相对)限定的(但这对于一级名称空间来说没有多大意义)

use uno;
new uno'one('two');

使用更深的命名空间更有意义

use path'to'myNamespace; 
        new myNamespace'foo'BarClass;

或者放到同一个命名空间

namespace uno;
new one('two');

见http://php.net/language.namespaces.rules