Zend图书馆与我自己的图书馆发生冲突

时间:2012-07-11 19:01:17

标签: php zend-framework

我在文件夹“classes”中拥有自己的lib。我试图使用Zend库作为独立的。 (将他们的类集成到我的应用程序中)。

E.g。如下。 Zend类都放在一个名为Zend

的文件夹下
  

类/ db.class.php

     

classes / 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';
    }   

}
}

我的功能检查我的应用程序是否需要我的班级,如果是,我将从我的“classes”文件夹加载它,如果不是它将从Zend文件夹加载。

每当我打电话

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

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

我如何做到这一点,因为我去了Zend和我自己之间的独立库。

1 个答案:

答案 0 :(得分: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);
    }
});