正在有的框架中的主动加载机制,正在发现无奈加载时, 间接报错, 而不把管制权转交给下一个主动加载办法., 如我要引入阿里云日记效劳接口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开发自学
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
抱歉,评论功能暂时关闭!