zoukankan      html  css  js  c++  java
  • [Yii Framework] spl_autoload_register 导致加载顺序冲突

    php版本

    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!

  • 相关阅读:
    软件工程课程总结
    《构建之法》部分读书笔记
    软件工程课程作业
    本周软件工程课程感想
    软件工程课设迭代开发第八天
    软件工程课设迭代开发第五至七天
    软件工程课设迭代开发第四天
    软件工程课设迭代开发第三天
    软件工程课设迭代开发第二天
    Bresenham中点画圆法与二阶差分算法
  • 原文地址:https://www.cnblogs.com/davidhhuan/p/2893592.html
Copyright © 2011-2022 走看看