您的位置:首页 > 编程语言 > PHP开发

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

2015-07-23 09:56 585 查看
近日,开发中,使用了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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: