1. 程式人生 > >PHP類延遲載入機制原理

PHP類延遲載入機制原理

    PHP中載入一個類,必須使用require 或者 include把類檔案包含進來,才可以例項化類,我們比較傳統的方法在使用的時候就是一次性的把所需要的類檔案全部進行require,PHP5之前是這麼幹的,PHP5之後引入了一個函式spl_autoload_register,欲註冊的自動裝載函式。如果沒有提供任何引數,則自動註冊autoload的預設實現函式,很多框架中也引入了這個類延遲載入機制,有效了節省了我們在使用類的時候的時間,下面我們就舉例說明一下,自動裝載類機制。

    程式碼很簡單只是簡單說明了這種裝載機制的好處:

<?php
			
		/**
			類延遲載入原理測試

		*/	
	
	//1.不使用類延遲載入
	
	require 'class/Class1.php';
	require 'class/Class2.php';
	
	$c1 = new Class1;
	$c2 = new Class2;
	$c1->say();
	$c2->say();
	
	//2.使用類延遲載入
	
	function autoload($class){
		
		require ('class/'.$class.'.php');
		
	}
	spl_autoload_register("autoload");
	
	
	$c1 = new Class1;
	$c2 = new Class2;
	$c1->say();
	$c2->say();
	



?>
上述程式碼分別寫出了使用延遲載入和不使用延遲載入的例子,主要說明延遲載入機制原理就是在我們需要例項化一個PHP類的時候,new class這個過程如果沒有包含類檔案活報出警告資訊,沒有包含該類檔案,但是這個時候,會去執行spl_autoload_register這個函式,執行之後,會將我們new的類名傳遞過去,進行包含我們的類檔案,這樣就是我們在使用的時候才去載入需要的類,而不是無論是否使用都進行載入,這個原理跟java框架的Spring很像,需要類的時候去建立類物件,不需要的時候就不載入。

YII2框架就使用了這個機制我們檢視YII2框架的程式碼:

找到vendor\yiisoft\yii2下面的Yii.php檔案



我們可以看到YII2框架就是使用了類延遲載入機制,在入口檔案index.php中包含了Yii.php就會執行自動裝載類的方法了,以上就是對PHP類自動裝載以及延遲載入的說明,

希望可以幫到大家。