[Yii Framework] spl_autoload_register 导致加载顺序冲突
2013-02-06 01:02
246 查看
php版本
Yii版本
1.1.13
Yii Framework使用spl_autoload_register实现类的自动加载,这个很大的方便我们不用每次都要手动的去include一些类和函数。不过这样会导致一些问题,比如说,有一些extension,如,使用taobao,它自己内部也使用了spl_autoload_register来实现自动加载类,由于在框架的执行顺序里面,首先是执行了spl_autoload_register(array('YiiBase','autoload')),这样会导致smarty里面的spl_autoload_register不会执行,这样就会出现使用taobao过程中,找不到它里面的类。这种情况解决方法有两种,
1. 先卸载yii的,再注册yii的autoload,如以下代码,修改taobao的SDK的 Autoloader.php文件
不过这种方法是要修改taobao的代码的,这样不利于taobao的升级,这时候,可以考虑使用第二种情况。
2. 优先注册了自己的autoload,如以下代码,是加在index.php里面的。
这样的话,所有的autoload都会优先使用taobao的autoloader,可以避免找不到taobao的类,不过这样会导致一些性能上的小损失。
Have fun with Yii!
davidhhuan@davidhhuan-ThinkPad-T410:~$ php -version PHP 5.3.10-1ubuntu3.4 with Suhosin-Patch (cli) (built: Sep 12 2012 18:59:41) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
Yii版本
1.1.13
Yii Framework使用spl_autoload_register实现类的自动加载,这个很大的方便我们不用每次都要手动的去include一些类和函数。不过这样会导致一些问题,比如说,有一些extension,如,使用taobao,它自己内部也使用了spl_autoload_register来实现自动加载类,由于在框架的执行顺序里面,首先是执行了spl_autoload_register(array('YiiBase','autoload')),这样会导致smarty里面的spl_autoload_register不会执行,这样就会出现使用taobao过程中,找不到它里面的类。这种情况解决方法有两种,
1. 先卸载yii的,再注册yii的autoload,如以下代码,修改taobao的SDK的 Autoloader.php文件
spl_autoload_unregister(array('YiiBase','autoload')); spl_autoload_register(array($this, "loadClass")); spl_autoload_register(array('YiiBase','autoload'));
不过这种方法是要修改taobao的代码的,这样不利于taobao的升级,这时候,可以考虑使用第二种情况。
2. 优先注册了自己的autoload,如以下代码,是加在index.php里面的。
require_once(dirname(__FILE__).'/protected/extensions/taobao/TopSdk.php'); require_once($yii); Yii::createWebApplication($config)->run();
这样的话,所有的autoload都会优先使用taobao的autoloader,可以避免找不到taobao的类,不过这样会导致一些性能上的小损失。
Have fun with Yii!
相关文章推荐
- [Yii Framework] spl_autoload_register 导致加载顺序冲突
- php命名空间+spl_autoload_register实现类的自动加载
- __autoload,spl_autoload_register与自动加载
- spl_autoload_register()自动加载+命名空间的使用
- PHP类的自动加载__autoload && spl_autoload_register
- PHP自动加载类—__autoload()和spl_autoload_register() (补充)
- php spl_autoload_register类库自动加载,省去引入类文件
- PHP spl_autoload_register实现自动加载研究
- spl_autoload_register 让类在需要的时候自动加载
- PHP 命名空间与自动加载机制介绍,spl_autoload_register, __autoload 函数
- PHP自动加载 spl_autoload_register
- php自动加载类的实现 spl_autoload_register
- PHP自动加载之spl_autoload_register()
- PHP自动加载上——spl_autoload_register
- PHP自动加载类—__autoload()和spl_autoload_register()
- 详解spl_autoload_register()函数以及自动加载不同目录的类
- PHP自动加载机制[2]---spl_autoload_register操作详解
- spl_autoload_register 注册自己的自动加载函数(__autoload())
- php 加载函数 __autoload(), spl_autoload_register()
- PHP自动加载类—__autoload()和spl_autoload_register() (补充)