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

资源魔 38 0
正在有的框架中的主动加载机制,正在发现无奈加载时, 间接报错, 而不把管制权转交给下一个主动加载办法., 如我要引入阿里云日记效劳接口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 处理名目中多个主动加载抵触成绩的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学

抱歉,评论功能暂时关闭!