1

我在文件夹“类”中有自己的库。我正在尝试将 Zend 库用作独立库。(将他们的课程整合到我的应用程序中)。

例如如下。Zend 类都放在一个名为 Zend 的文件夹下

类/db.class.php

类/Zend/translate.php ....

我以前使用自动加载功能来加载类。

if (!function_exists ("__autoload")){
function __autoload($class_name) 
{

    if(file_exists(ABSPATH.'/classes/'.$class_name.'.class.php')){
        require_once ABSPATH.'/classes/'.$class_name.'.class.php';
    }   

}
}

我的函数检查我的应用程序是否需要我的类,如果是,我将从我的“类”文件夹加载它,如果不是,它将从 Zend 文件夹加载。

每当我打电话

require_once ABSPATH.'/classes/Zend/Loader/Autoloader.php'; 
$loader = Zend_Loader_Autoloader::getInstance(); 

它一直说我的“自己的”类没有加载。我认为这是 Zend 自动加载的问题,它检查并发现它需要 zend 文件夹中的 db.class.php。

当我在 Zend 和我自己的库之间分离库时,我该怎么做。

4

1 回答 1

2

魔术__autoload功能不支持多个自动加载器。如果您如上所示指定自定义自动加载器,然后注册 Zend 自动加载器,则以前安装的自动加载器将被 Zend 自动加载器覆盖。

由于 Zend 组件使用 spl_autoload_register(),您也可以使用此方法(支持多个自动加载器 - 它基本上安装一个处理另一个(用户定义的)自动加载器堆栈的自动加载器)。

http://php.net/manual/function.spl-autoload-register.php

// Example (requires PHP >= 5.3 because of the anonymous function)
spl_autoload_register(function($className) {
    $fileName = ABSPATH .'/classes/'. $className .'.class.php';
    if (is_readable($fileName)) {
        require_once($fileName);
    }
});
于 2012-07-11T19:16:12.670 回答