2009-11-28 130 views
1

爲什麼我收到錯誤?在同一個命名空間中的類..在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

回答

2

我無法找到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