【发布时间】:2012-12-06 02:51:44
【问题描述】:
我有一个这样的项目:
现在我想自动加载文件夹类和子文件夹中的所有 php 文件。
我可以这样做:
$dirs = array(
CMS_ROOT.'/classes',
CMS_ROOT.'/classes/layout',
CMS_ROOT.'/classes/layout/pages'
);
foreach( $array as $dir) {
foreach ( glob( $dir."/*.php" ) as $filename ) {
require_once $filename;
}
}
但我不喜欢这个。例如。
“layout/pages/a.php”扩展了“layout/pages/b.php”
现在我收到一个错误,因为首先加载了 a.php。你们是如何加载项目文件的?上课?
已解决:)
这是我现在的代码:
spl_autoload_register('autoloader');
function autoloader($className) {
$className = str_replace('cms_', '', $className);
$className = str_replace('_', '/', $className);
$file = CLASSES.'/'.$className.'.php';
if( file_exists( $file ) ) {
require_once $file;
}
}
【问题讨论】:
-
我认为您误解了“自动加载”的概念:php.net/manual/en/language.oop5.autoload.php - 此资源可能也有帮助:framework.zend.com/manual/1.12/en/zend.loader.autoloader.html
-
好吧,如果你直接撞到墙上,那并不总是很好。可能首先查看 PHP 手册,另请参阅 php.net/spl_autoload_register 并考虑如何将类名映射到文件名。
标签: php include project require autoload