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!
