在php中的命名空间和类

问题描述:

为什么我收到错误?在同一个命名空间中的类..在php中的命名空间和类

PHP 5.3.0

namespace ExampleSystem\Core; 
class Test { 
    public function __construct() { 
     print 'Test ok'; 
    } 
} 

// Fatal error: Class 'Test' not found in ... 
$class_name = 'Test'; 
$obj = new $class_name; 

// Ok 
$class_name = 'ExampleSystem\Core\Test'; 
$obj = new $class_name; 

// Ok 
$obj = new Test; 
+3

所以*这就是*传说中的命名空间是什么样子...... – 2009-11-28 17:58:38

我无法找到PHP手册篇章,段落,但显而易见的解释是,当你做:

$obj = new $string 

然后$string的值没有映射到当前命名空间。这是有道理的,当你认为$string可能已经从其他地方传入,其中不同的名称空间可能已经生效。

+0

我本来会期望它在它所在的命名空间的上下文中进行评估,但是php很少能够做到我所期望的,因为我期望现在可以通常会让它做我想做的事。 :) – mtvee 2009-11-28 18:24:20

+0

谢谢! 我在php.net网站上找到了一个例子...魔术常量__NAMESPACE__是答案:) http://il2.php.net/manual/en/language.namespaces.nsconstants.php 例3 – Alex 2009-11-28 18:33:53