如何将__autoload用于不同的文件夹?

时间:2012-05-23 00:27:39

标签: php oop

我正在尝试自动加载位于不同文件夹中的类。这可能吗?

       function __autoload($class){
            require $class.'.php';
            require 'libs/'.$class.'.php';
            //this won't work.
        }

我想自动加载libs文件夹或root文件夹中的类。有什么想法吗?非常感谢。

1 个答案:

答案 0 :(得分:3)

首先,我建议你研究一下spl_autoload_register,这样做会更好。

其次,您应该使用is_file来测试文件是否存在,然后尝试加载它。如果require文件不存在,则脚本将暂停。

spl_autoload_register(function($class) {
    if (is_file($class . '.php')) {
        require $class . '.php';
    } elseif (is_file('libs/' . $class . '.php')) {
        require 'libs/' . $class . '.php';
    }
});

如果文件可能有多个文件夹,则可以执行以下操作:

spl_autoload_register(function($class) {
    $folders = array ('.', 'libs', 'somewhere');

    foreach ($folders as $folder) {
        if (is_file($folder . '/' . $class . '.php')) {
            require $folder . '/' . $class . '.php';
        }
        if (class_exists($class)) break;
    }
});