在我的项目中集成PHP Spout

时间:2017-06-28 11:00:10

标签: php phpexcel autoload

我有一个使用自定义自动加载类的旧项目与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+单元格和自定义样式)时,它太慢了。如果我使用建议的方法通过添加

在我的项目中集成Spout
require_once System::getPath('EXTERNAL') . '/Spout/Autoloader/autoload.php';

到我的文件,PHP无法再找到我的类(加载自动加载的那个)。有没有什么方法可以通过保留我的自定义__autoload函数成功地将Spout集成到我的项目中?

1 个答案:

答案 0 :(得分:0)

__autoload函数是一个全局函数,在使用Spout自动加载器时会被覆盖。要同时使用两种自动加载功能,您需要切换到spl_autoload_register。它将允许您定义多个处理程序来加载您的类(PHP将遍历所有这些处理程序,直到可以成功加载该类)。

因此,在您的情况下,只需将function __autoload($class_name)替换为spl_autoload_register(function ($class_name),这应该有效!