像现在的大多数 Web 开发人员一样,我非常享受用于 Web 应用程序和网站的可靠 MVC 架构的好处。在使用 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、字符串检查和目录扫描对我来说似乎效率低下,我想改进它。
我很好奇其他开发人员可能会采用什么文件命名和自动加载策略。我正在寻找专门用于高效自动加载的好技术,而不是自动加载的替代品。