php之自動加載(懶加載)


    有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里面的邏輯。


免責聲明!

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



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