2010-07-23 71 views
4

我剛剛學習了關於PHP的命名空間並開始創建一個簡單的自動加載函數。 O做的是:關於一個簡單的PHP自動加載器的問題

function __autoload($name) { 
    echo $name . "<br />"; 
    require_once $name . ".php"; 
} 

所以,如果我不使用任何別名或導入語句,例如。 use MainNamespace\Subnamespace因爲如果我這樣做,假設我有:

\GreatApp\Models\User.php 
\GreatApp\Models\Project.php 
\GreatApp\Util\Util.php 
\GreatApp\Util\Test\Test.php 

,如果我嘗試做:

new GreatApp\Models\User(); 

它的作品,因爲$name在自動加載將成爲GreatApp\Models\User所以GreatApp\Models\User.php被發現。但是,當我做的:

use GreatApp\Models; 
new User(); 

它失敗,因爲現在$name只是UserUser.php不會被發現。那麼我應該如何設置自動加載?

+0

您應該spl_autoload_register使用,而不是__autoload功能。 – Macmade 2010-07-23 13:46:53

回答

1

無論您如何導入名稱空間和引用類,完整名稱空間路徑始終傳遞給自動加載器。它應該工作。

就在__autoload函數本身應該屬於主(根)命名空間

+0

請閱讀關於名稱空間如何工作的PHP文檔。當您嘗試使用「Test \ Test」引用類時,它實際上意味着您引用\ current-namespace \ Test \ Test。 current-namespace是您引用的文件的命名空間。 「使用」不會更改當前名稱空間。它只是從當前內部導入另一個要使用的命名空間。 – 2010-07-24 18:28:31

+0

更好地理解命名空間請點擊此鏈接 http://www.sitepoint.com/php-53-namespaces-basics/ – 2014-10-10 07:40:32