1. 程式人生 > >php之自動加載(懶加載)

php之自動加載(懶加載)

是不是 靜態方法 sta 過程 () 代碼 一個 new 封裝

有A類和B類,如果在A類實例化B類,最簡單直接的方法就是在B中使用include require_once A的文件,但是這種方法顯然是不友好的,在框架中葉不是這麽做的,在框架中使用的是自動加載的機制也成為懶加載。

php中自動加載使用spl_autoload_register來完成在沒有指定類的情況下自動加載的動作,有了這個方法在new一個類之前,就算沒有引入這個類的文件,也能正確初始化指定類,這樣我們就不用使用include require_once來引入文件,其實這個方法就是對include方法的封裝,同時需要自己實現。下面舉個??,並說明其原理

下面這段是autolod.php的源碼:

 1 <?php
 2 spl_autoload_register(array(‘autoload‘,‘load‘));
 3 class autoload{
 4     public static function load($classnName){
 5         if ( !class_exists($classnName) ) {
 6             $file = $classnName.‘.php‘;
 7             require_once(‘./‘.$file);
 8 
 9         }
10     }
11 } 12 $class = new autoload_test(); 13 $class->test();

下面這段是autolod_test.php的源碼:

1 <?php
2 class autoload_test{
3     function test(){
4         echo ‘this is test‘;
5     }
6 }

代碼很簡單,但是足以說明spl_autoload_register自動加載的機制,在代碼執行的過程中,當new一個未包含的類的時候,php會去執行spl_autoload_register中的第一個參數,就是需要new的類名,這個函數的功能就是把沒有引入的類引入進來,但是有個前提就是類的名字和文件的名字要一致,這樣就實現了自動加載的功能,是不是很簡單。

spl_autoload_register這個方法還有另一種常用的調用方式spl_autoload_register(array($className,$functionName));使用指定的類中的靜態方法去完成自動加載,靜態方法裏面的結構就是完成autoload裏面的邏輯。

php之自動加載(懶加載)