yii框架號稱最高效的php框架,執行效率高出其他框架很多。據官方介紹,yii框架廣泛的使用了一種叫做延遲載入的技術,從而達到這樣的效果。
下面我們就通過例項詳細的來介紹一下這個技術
首先我們在www
目錄新建2個類class1
、class2
和乙個index.php
檔案。
在class1
和class2
中我們只簡單的寫乙個簡單結構
class1.php
class class1
}class2.php
class class2
}
接下來我們在index.php
檔案中引入這兩個類
require_once('class1.php');
require_once('class2.php');
同時我們再定義乙個變數$state
,將其值設定為1。我們再對$state
做一些判斷操作。
$state = 1;
if($state == 1)
else
我們判斷$state
值,如果為1,則輸出一句話和例項化class1
。否則,同樣輸出一句話,和例項化class2
。
**正常執行。但是我們發現,我們在if
中例項化class1
或class2
。不管何時,都只能例項化其中的乙個,而我們在引入檔案的時候,卻是一次性的將兩個類都引入進來了。這樣不可避免的造成了一些資源的浪費。
所以,我們可以先進行一些小的優化。
比如:我們在if
判斷中,需要例項化類的時候,再去載入相應的檔案。**如下:
$state = 1;
if($state == 1)
else
優化過後的index.php
檔案效率肯定得到了提公升,這個也就是類的延遲載入雛形。但是這樣就會出現乙個問題,在需要載入的檔案很多時候,並不是太方便。通用性不是很強。
在yii中,這個問題被很好的解決。
其核心**就是spl_autoload_register()
函式,該函式可以自動執行函式。
其括號中引數為需要執行的函式的函式名。比如我們定義乙個函式,叫fun_loader()
.然後將fun_loader
作為spl_autoload_register()
的引數,那麼在程式執行時候,就會自動的執行fun_loader
函式。
我們先在index.php
函式頂部加入**
function fun_loader($value)
spl_autoload_register('fun_loader');
這樣程式在執行時候就會自動呼叫函式fun_loader
,並且輸出123
有了自動呼叫函式功能,我們就可以把剛剛的需要載入的兩個類放入這個函式,達到自動載入的效果。
function fun_loader($value)
但是這樣還是回歸到了之前的情況,多載入了乙個無用的類。
所以,fun_loader
的引數起作用了,我們可以動態的將需要載入的類傳遞進來,實現按需載入。
我們將改造後的index.php
完整的寫出來,如下:
function fun_loader($value)
spl_autoload_register('fun_loader');
$state = 1;
if($state == 1)
else
這樣,當例項化的時候,如果發現沒有找到相應的類。那麼就會執行一下fun_loader
函式。同時,將例項化的類名作為引數,傳遞給fun_loader
這樣就可以實現需要時候載入需要的類。這就是yii的延遲載入了。
yii具體的**在檔案vendor\yiisoft\yii2\yii.php
<?php
/** * yii bootstrap file.
* * @link
* @license license/
*/require(__dir__ . '/baseyii.php');
/** * yii is a helper class serving common framework functionalities.
* * it extends from [[\yii\baseyii]] which provides the actual implementation.
* by writing your own yii class, you can customize some functionalities of [[\yii\baseyii]].
* * @author qiang xue * @since 2.0
*/class yii extends \yii\baseyii
spl_autoload_register(['yii', 'autoload'], true, true);
yii::$classmap = require(__dir__ . '/classes.php');
yii::$container = new yii\di\container();
Yii框架之 類的延遲載入例項說明
以例子的方式解釋 現有三個類,class1.php class2.php index.php 在index中 require class class1.php require class class2.php is girl get 0?ture false if is girl else本例存在的...
yii2框架 yii2自身的自動載入 三
上一節說完了composer的自動載入,下面我們來說一下yii2自身的自動載入。在我們的入口檔案,例如index.php,如下 comment out the following two lines when deployed to production defined yii debug or d...
yii2的自動載入類檔案
一。檢視了一下yii2的載入原理 每個命名空間都有對應的路徑 然後檔名一定要與類名相同 通過yii classmap可設定。或別名也可識別。當我要用乙個不認識的類名時,會自動呼叫魔術方法yii類下的spl autoload register,然後執行autoload方法,在這個方法裡會把對應的類檔案...