高效的自动加载功能

时间:2011-03-18 02:02:35

标签: php performance autoload

我目前正在构建自己的PHP框架,并创建了许多目录来存储我的类。

这是我目前的自动加载功能:

function __autoload($className)
{
    $locations = array('', 'classes/', 'classes/calendar/', 'classes/exceptions/', 'classes/forms/', 'classes/table/', 'classes/user', 'pages/', 'templates/');
    $fileName = $className . '.php';

    foreach($locations AS $currentLocation)
    {
        if(file_exists($currentLocation . $fileName))
        {
            include_once ($currentLocation . $fileName);
            return;
        }
    }
}

现在在我的主类文件中,我确实已经包含了所有必需的类,因此不必搜索它们。

以下是我的问题:

  1. 这个功能足够有效吗?是否会有很多加载时间,或者我有办法最小化加载时间吗?
  2. include_once()是我应该包括类的方式吗?
  3. 有没有办法可以编写函数来猜测最受欢迎的文件夹?或者这会占用太多时间和/或不可能?
  4. 命名空间会帮助我吗? (我正在阅读并立即了解它们。)

1 个答案:

答案 0 :(得分:1)

  1. 这里的回答非常好:autoload and multiple directories
  2. 您应该使用require,原因有两个:a)如果文件已经包含在内,您不需要使用PHP跟踪,因为如果有,则不需要调用{{ 1}}首先和b)如果不能包含文件你将无法继续执行
  3. 第1点的答案涵盖了这个
  4. 不一定;你需要一些类似命名空间的机制来实现更快的加载(只查看你需要的地方),但你可以在不使用真实命名空间的情况下伪造它
  5. 作为参考,__autoload与名称空间之间的交互记录为here