php之自动加载(懒加载)
? ? 有A類和B類,如果在A類實(shí)例化B類,最簡(jiǎn)單直接的方法就是在B中使用include require_once A的文件,但是這種方法顯然是不友好的,在框架中葉不是這么做的,在框架中使用的是自動(dòng)加載的機(jī)制也成為懶加載。
? ? php中自動(dòng)加載使用spl_autoload_register來(lái)完成在沒有指定類的情況下自動(dòng)加載的動(dòng)作,有了這個(gè)方法在new一個(gè)類之前,就算沒有引入這個(gè)類的文件,也能正確初始化指定類,這樣我們就不用使用include require_once來(lái)引入文件,其實(shí)這個(gè)方法就是對(duì)include方法的封裝,同時(shí)需要自己實(shí)現(xiàn)。下面舉個(gè)?,并說(shuō)明其原理
下面這段是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 }代碼很簡(jiǎn)單,但是足以說(shuō)明spl_autoload_register自動(dòng)加載的機(jī)制,在代碼執(zhí)行的過(guò)程中,當(dāng)new一個(gè)未包含的類的時(shí)候,php會(huì)去執(zhí)行spl_autoload_register中的第一個(gè)參數(shù),就是需要new的類名,這個(gè)函數(shù)的功能就是把沒有引入的類引入進(jìn)來(lái),但是有個(gè)前提就是類的名字和文件的名字要一致,這樣就實(shí)現(xiàn)了自動(dòng)加載的功能,是不是很簡(jiǎn)單。
? ??spl_autoload_register這個(gè)方法還有另一種常用的調(diào)用方式spl_autoload_register(array($className,$functionName));使用指定的類中的靜態(tài)方法去完成自動(dòng)加載,靜態(tài)方法里面的結(jié)構(gòu)就是完成autoload里面的邏輯。
轉(zhuǎn)載于:https://www.cnblogs.com/zzq919101/p/10458106.html
總結(jié)
以上是生活随笔為你收集整理的php之自动加载(懒加载)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ThreadLocal的学习
- 下一篇: PHP正则表达式大全