2011-08-18 84 views
0

我无法动态实例化PHP中的类以在我的文件命名空间中工作。 PHP似乎完全不知道我的文件上的use关键字,因为我尝试基于变量的值动态地实例化类。PHP:Instanciating命名空间类

有没有一个很好的解决方案,除了硬编码命名空间动态实例化类时?

下面是一些快速的样本,以说明我的意思:

代码new two('one');在结果类一个也没有找到与以下两个文件被包括:

文件1:

namespace uno; 
use dos; 

class one { 
    function __construct($what) { 
     new $what; 
    } 
} 

文件2:

namespace dos; 
class two { } 

文件3:

new one('two'); // Doesn't work! 

回答

1

要么全合格

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

+0

嗨!我没有使用一个级别的命名空间,但为了在这里简化以获得一些答案而不让所有人都感到困惑,我决定在我的示例中跳过它们 – Industrial

+0

无关紧要:它没有什么意义,级别的命名空间;)使用更深的命名空间更有意义'使用path \ to \ myNamespace; new myNamespace \ foo \ BarClass;'请注意'new'后面的标识符是如何从'use'语句的命名空间的最后部分开始的。 – KingCrunch

+0

从我的观点来看问题是PHP忽略了我的动态实例化类的'use'关键字,即。 '新$什么'。任何想法呢? – Industrial

相关问题