[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!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM