2

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

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

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

4

1 回答 1

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;
    }
});
于 2012-05-23T00:34:45.257 回答