首页后端开发PHPphp 解决项目中多个自动加载冲突问题

php 解决项目中多个自动加载冲突问题

时间2024-02-01 23:02:03发布访客分类PHP浏览840
导读:收集整理的这篇文章主要介绍了php 解决项目中多个自动加载冲突问题,觉得挺不错的,现在分享给大家,也给大家做个参考。在有的框架中的自动加载机制,在发现无法加载时, 直接报错, 而没有把控制权转交给下一个自动加载方法., 如我要引入阿里云日志...
收集整理的这篇文章主要介绍了php 解决项目中多个自动加载冲突问题,觉得挺不错的,现在分享给大家,也给大家做个参考。在有的框架中的自动加载机制,在发现无法加载时, 直接报错, 而没有把控制权转交给下一个自动加载方法., 如我要引入阿里云日志服务接口sdk,该sdk中自带自动加载方法,如下:

?php/** * Copyright (C) Alibaba Cloud Computing * All rights reserved */$version = '0.6.0';
function Aliyun_LOG_PHP_Client_Autoload($classname) {
        $classPath = explode('_', $className);
    if ($classPath[0] == 'Aliyun') {
            if(count($classPath)>
    4)            $classPath = array_slice($classPath, 0, 4);
            $filePath = dirname(__FILE__) . '/' . implode('/', $classPath) . '.php';
            if (file_exists($filePath))            require_once($filePath);
    }
}
    spl_autoload_register('Aliyun_Log_PHP_Client_Autoload');
    

上面自动加载方法会与原有框架自己的加载方法冲突,解决方法如下:

?phpfunction autoloadAdjust(){
        // 取原有的加载方法    $olDFunctions = spl_autoload_functions();
    // 逐个卸载    if ($oldFunctions){
        foreach ($oldFunctions as $f) {
                spl_autoload_unregister($f);
        }
    }
    // 注册本框架的自动载入    spl_autoload_register(        # 就是aliyun sdk的加载方法        function ($className) {
                $classPath = explode('_', $className);
            if ($classPath[0] == 'Aliyun') {
                        if(count($classPath)>
    4)                    $classPath = array_slice($classPath, 0, 4);
                    unset($classPath[0]);
                    $filePath = dirname(__FILE__) . '/' . implode('/', $classPath) . '.php';
                    if (file_exists($filePath))                    require_once($filePath);
            }
        }
        );
    // 如果引用本框架的其它框架已经定义了__autoload,要保持其使用    if (function_exists('__autoload')) {
            spl_autoload_register('__autoload');
    }
    // 再将原来的自动加载函数放回去    if ($oldFunctions){
        foreach ($oldFunctions as $f) {
                spl_autoload_register($f);
        }
    }
}
    # 最后调用上面方法autoloadAdjust();
    

注意在引入时,按照上面方法使用可能要改变代码中的文件路径

参考:

近日,开发中,使用了zf框架和一个自有框架进行配合.

先启动了ZF, 之后,启动自有框架, 这时发现 自有框架的自动加载 不生效.

双方都使用了 spl_autoload_register 对自动加载方法进行了 注册.

分析后发现, ZF的加载方法,在发现无法加载时, 直接报错, 而没有把控制权转交给下一个自动加载方法.

如果先注册自有框架的加载方法,就不会出问题.因为自有框架的自动加载方法 找不到类时,会返回False,这将控制权转交给下一个加载方法

项目状态导致注册顺序只能是ZF在前面. 查了手册 写了下面的程序来调整注册顺序

以上就是php 解决项目中多个自动加载冲突问题的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: php 解决项目中多个自动加载冲突问题
本文地址: https://pptw.com/jishu/596034.html
php实现队列的详细步骤 PHP代码加密的几种方法介绍

游客 回复需填写必要信息