百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> php 解决项目中多个主动加载冲突题目
分享文章到:

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

发布时间:09/01 来源:未知 浏览: 关键词:
在有的框架中的主动加载机制,在发明没法加载时, 直接报错, 而没有把操纵权转交给下一个主动加载办法., 如我要引入阿里云日志效劳接口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');

上面主动加载办法会与原有框架本人的加载办法冲突,解决办法如下:

<?php
function 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 解决项目中多个主动加载冲突问题的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有152人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板