我有一个使用自定义自动加载类的旧项目与MySQL数据库和PHPExcel交谈:
function __autoload($class_name)
{
if (stripos($class_name, 'controller') !== false) {
require_once(System::getPath('CONTROLLERS') . $class_name . '.class.php');
} else if (stripos($class_name, 'PHPExcel') !== false) {
$path = System::getPath('EXTERNAL') . str_replace('_', '/', $class_name) . '.php';
if (is_readable($path)) {
require_once $path;
}
} else {
if (stripos($class_name, 'abstract') === false) {
$class_name = str_ireplace('mapper', '', $class_name);
}
require_once(System::getPath('MODELS') . $class_name . '.class.php');
}
}
现在我想将我的项目从PHPExcel迁移到Spout(https://github.com/box/spout/),因为当PHPExcel必须编写大文件(30000+单元格和自定义样式)时,它太慢了。如果我使用建议的方法通过添加
在我的项目中集成Spoutrequire_once System::getPath('EXTERNAL') . '/Spout/Autoloader/autoload.php';
到我的文件,PHP无法再找到我的类(加载自动加载的那个)。有没有什么方法可以通过保留我的自定义__autoload函数成功地将Spout集成到我的项目中?
答案 0 :(得分:0)
__autoload
函数是一个全局函数,在使用Spout自动加载器时会被覆盖。要同时使用两种自动加载功能,您需要切换到spl_autoload_register
。它将允许您定义多个处理程序来加载您的类(PHP将遍历所有这些处理程序,直到可以成功加载该类)。
因此,在您的情况下,只需将function __autoload($class_name)
替换为spl_autoload_register(function ($class_name)
,这应该有效!