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里面的邏輯。
轉載于:https://www.cnblogs.com/zzq919101/p/10458106.html
總結
以上是生活随笔為你收集整理的php之自动加载(懒加载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ThreadLocal的学习
- 下一篇: ubuntu常见问题解决方法