我在文件夹“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和我自己之间的独立库。
答案 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);
}
});