PHP中多个自动加载方法的顺序控制

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


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


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


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


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


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


 /**
     * 调整 自动载入 方法, 以保证把本框架的方法放到最前面(优先执行)
     */
    private static function autoloadAdjust ()
    {
        // 取原有的加载方法
        $oldFunctions = spl_autoload_functions();
        
        // 逐个卸载
        if ($oldFunctions)
            foreach ($oldFunctions as $f) {
                spl_autoload_unregister($f);
            }
            
            // 注册本框架的自动载入
        spl_autoload_register(array(
                'SFrame',
                'autoload'
        ));
        
        // 如果引用本框架的其它框架已经定义了__autoload,要保持其使用
        if (function_exists('__autoload')) {
            spl_autoload_register('__autoload');
        }
        
        // 再将原来的自动加载函数放回去
        if ($oldFunctions)
            foreach ($oldFunctions as $f) {
                spl_autoload_register($f);
            }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值