2010-07-23 59 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