【发布时间】:2009-04-27 00:33:30
【问题描述】:
与当今的大多数 Web 开发人员一样,我非常享受可靠的 MVC 架构为 Web 应用程序和网站带来的好处。使用 PHP 进行 MVC 时,自动加载显然非常方便。
我已经成为spl_autoload_register 的粉丝,而不是简单地定义一个__autoload() 函数,因为如果您合并不同的基本模块,每个模块都使用自己的自动加载,这显然更灵活。但是,我从来没有对自己编写的加载函数感觉良好。它们涉及大量的字符串检查和目录扫描,以便寻找可能要加载的类。
例如,假设我有一个应用程序,它的基本路径定义为PATH_APP,以及一个简单的结构,其中包含名为models、views 和controllers 的目录。我经常使用一种命名结构,文件在适当的目录中被命名为IndexView.php 和IndexController.php,默认情况下模型通常没有特定的方案。我可能有一个像这样的结构的加载器函数,它被spl_autoload_register注册:
public function MVCLoader($class)
{
if (file_exists(PATH_APP.'/models/'.$class.'.php')) {
require_once(PATH_APP.'/models/'.$class.'.php');
return true;
}
else if (strpos($class,'View') !== false) {
if (file_exists(PATH_APP.'/views/'.$class.'.php')) {
require_once(PATH_APP.'/views/'.$class.'.php');
return true;
}
}
else if (strpos($class,'Controller') !== false) {
if (file_exists(PATH_APP.'/controllers/'.$class.'.php')) {
require_once(PATH_APP.'/controllers/'.$class.'.php');
return true;
}
}
return false;
}
如果之后没有找到,我可能有另一个功能来扫描模型目录中的子目录。但是,所有 if/else-ing、字符串检查和目录扫描对我来说似乎效率低下,我想改进它。
我很好奇其他开发人员可能会采用什么文件命名和自动加载策略。我正在专门寻找用于高效自动加载的好技术,而不是自动加载的替代方法。
【问题讨论】:
标签: php naming-conventions spl-autoload-register