2013-04-17 34 views
0

我建造一個新的對象在我的文件沒有命名空間:命名空間 - __autoload()被要求錯誤的類

new My\Validator(); 

以上,在同一個文件我有__autoload():

function __autoload($className) 
{ 
    var_dump($className); 
} 

__autoload()功能打印

'My\My\Validator'. 

在哪裏雙'My'從哪裏來?

+0

您需要在全局空間中聲明自動加載 – Federkun

+0

由於名稱空間「我的」? –

+0

你是從全局命名空間還是'My'命名空間調用'new My \ Validator();'您可能還想查看'spl_autoload_register'函數 - 它比'__autoload'函數更靈活,因爲它允許您註冊多個自動加載器。 – GarethL

回答

1

它添加了My名稱空間,因爲當您使用new My\Validator()創建對象時,您可能已在My名稱空間之內。

namespace My; 
$obj = new My\Validator(); 

將被翻譯成:

$obj = new My\My\Validator(); 

既然你是My命名空間中已經可以:

  • 要麼只是調用new Validator()
  • 或致電new \My\Validator()

開頭\將告訴PHP查看全局名稱空間。


在一個側面說明,它是considere使用spl_autoload_register代替__autoload,因爲你可以設置多個自動加載回調很好的做法。