PHP:实例化命名空间类

时间:2011-08-18 21:45:59

标签: php oop

当我的文件被命名空间时,我无法动态实例化PHP中的类。 PHP似乎完全不知道我的文件顶部的use关键字,因为我尝试根据变量的值动态地实例化类。

除了在动态实例化类时对命名空间进行硬编码外,还有一个很好的解决方案吗?

以下是一些快速示例,以显示我的意思:

代码new two('one');结果是找不到包含以下两个文件的第一类:

File1中:

namespace uno;
use dos;

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

文件2:

namespace dos;
class two { }

文件3:

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

1 个答案:

答案 0 :(得分: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