【发布时间】:2012-09-10 15:06:33
【问题描述】:
我正在从头开始开发一个新应用程序,我需要递归地自动加载文件。 但是,我需要使用 Zend Framework 之类的命名空间。
例如,LibraryName_Http_Request 将加载 LibraryName/Http/Request.php 文件。
无论我尝试过什么,如果我将文件命名为 LibraryName_Http_Request.php,我只能使用 LibraryName_Http_Request 类。
我不知道如何更改我的代码,以便我可以以相同的 Zend 方式加载类文件...
这是我的代码:
class Autoloader
{
public function __construct()
{
spl_autoload_register( array( $this, 'autoload' ) );
}
public function autoload( $class )
{
$iterator = new RecursiveDirectoryIterator( LIBRARY_PATH );
foreach( new RecursiveIteratorIterator( $iterator ) as $file=>$meta ) {
if( ( $class . '.php' ) === $meta->getFileName() ) {
if( file_exists( $file ) ) {
require_once $file;
}
break;
}
}
unset( $iterator, $file );
}
}
【问题讨论】:
-
有时您需要将下划线替换为目录分隔符。
-
为什么你不想使用
Zend_Loader_Autoloader并注册你需要的命名空间? -
b.b3rn4rd - 我不能在项目中使用任何其他库! @Mike B - 我尝试了很多方法来替换文件,但都没有奏效!
-
您可以使用 Composer 附带的自动加载系统,它很轻,您可以根据需要减少两个文件
-
我已经更新了我的答案。现在是否满足您的需求?
标签: php zend-framework autoload