相关疑难解决方法(0)

高效的PHP自动加载和命名策略

像大多数Web开发人员一样,我非常享受固态MVC架构对Web应用程序和站点的好处.使用PHP进行MVC时,自动加载显然非常方便.

我已成为spl_autoload_register过度简单定义单个__autoload()函数的粉丝,因为如果要合并每个使用自己的自动加载的不同基本模块,这显然会更灵活.但是,我从来没有对我写的加载函数感到满意.它们涉及大量字符串检查和目录扫描,以便查找可能加载的类.

举例来说,假设我有一个具有被定义为基本路径的应用程序PATH_APP和一个简单的结构,命名的目录models,viewscontrollers.我经常使用命名结构来命名文件IndexView.phpIndexController.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;
}
Run Code Online (Sandbox Code Playgroud)

如果之后没有找到它,我可能有另一个函数来扫描models目录中的子目录.但是,所有if/else-ing,字符串检查和目录扫描对我来说似乎效率低下,我想改进它.

我很好奇其他开发人员可能采用的文件命名和自动加载策略.我正在寻找专门用于高效自动加载的良好技术,而不是自动加载的替代方案.

php naming-conventions spl-autoload-register

38
推荐指数
3
解决办法
3万
查看次数