yii框架autoload機制

2021-06-16 11:11:29 字數 1166 閱讀 9142

yii框架宣稱自己的類載入方式很高效,是真正的「用時載入」,那究竟特別在**?今天研究了一下原始碼,發現其實是在**級加了一層「路徑快取」。

我們知道,要實現自己的autoload方法,需要採用spl_autoload_register()函式註冊乙個autoload方法,yii註冊的這個方法是yiibase::autoload(),稍後再講解這個方法的邏輯。另外,yii一般都用yii::import($pathalias, $forceinclude=false)來載入相應的類(這個方法直接呼叫了yiibase::import() ),這個方法配合yiibase::autoload()就能實現「用時載入」了。

1、檢查self::$_imports陣列是否存在相應的$pathalias,如果有說明已經載入過了,直接返回類名或者目錄名;否則繼續第2步;

2、根據路徑別名獲得實際的路徑名,並根據路徑別名最後一部分是否是「*」可以知道要載入的路徑別名是否是乙個檔案,如果是檔案,去第3步;否則去第4步;

3、如果是$forceinclude是true,則立即require這個檔案,並在$_imports陣列中增加一項$alias => $classname;否則在陣列$classmap中快取一項$classname => $realpath;

4、對於路徑,會在陣列$_includepaths中快取這個路徑,並且在$_imports陣列中增加一項$alias => $realpath;

5、結束。

因為$forceinclude預設都為false,所以import不會立即載入相應的類,等到使用時才真正載入,這是yiibase::autoload的工作。

1、檢查類名是否已快取在$classmap或$_coreclasses陣列中,如果是則直接require相應的檔案路徑,$_coreclasses是框架自有類的對映表;否則去第2步;

2、檢測yiibase::$enableincludepath是否為false,如果是則去第3步,否則直接include($classname . '.php')

3、遍歷$includepaths陣列,將目錄名拼接上類名,檢查是否為合法的php檔案,如果是則include,然後跳出迴圈

4、結束。

需要注意的是,文件指出:如果要與其他類庫一起使用,必須將$enableincludepath置為false,以便在yii::autoload()失敗時,其他類庫的autoload方法有機會執行。

yii框架學習(一)yii框架介紹

yii幾乎擁有了當今web2.0應用發展的全部特性。下面是這些特性的乙個簡短的清單。yii是乙個基於元件 用於開發大型web應用的高效能php框架。在web開發中yii可以最大限度的實現 重用,極大的提高開發的速度。名字yii 讀音是yee or ji 應該就是 易 的讀音 代表的是容易 easy ...

YII 框架 php框架系列之新秀YII

這裡也強烈推薦yii框架,這個年輕的框架由美國華人開發,名叫薛強。yii framwork是2009最佳php框架。yii 是乙個基於元件 用於開發大型 web 應用的高效能 php 框架。它將 web 程式設計中的可重用性發揮到極致,能夠顯著加速開發程序。yii 讀作 易 代表簡單 easy 高效...

yii框架學習(六)yii框架相應處理

yii框架使用response類來修改statuscode,如下 res statuscode 404 複製 使用header類下的add方法既可以,如下是新增禁止瀏覽器快取配置資訊。res headers add pragma no cache 複製 使用set方法來修改 res headers ...