首頁  >  文章  >  後端開發  >  php物件導向中的單例與靜態方法的對比,以及關於class自動載入的分析

php物件導向中的單例與靜態方法的對比,以及關於class自動載入的分析

PHP中文网
PHP中文网原創
2016-08-08 09:32:381187瀏覽

靜態方法:

範例

class A{
	public static function a(){
		# code ...
	}
	public static function b(){
		# code ...
	}
}
// 使用
A::a();
A::b();


當腳本被解釋的時候,靜態方法會被載入到記憶體(並且單份儲存)。使用的時候可以像是使用函數一樣。

單例:

為了實現一個class在記憶體中只有單份被存儲,用靜態變數透過程式碼實現的一種設計模式

範例

class Container(){
	protected static $loadedSingletonClasses = [];
	public static function loadSingletonClass($className=''){
		if(!isset(self::$loadSingletonClass[$className])){
			self::$loadSingletonClass[$className] = new $className;
		}
		return self::$loadSingletonClass[$className];
	}
}
$a = Container::loadSingletonClass("foo\bar\MyClass");
$b = Container::loadSingletonClass("foo\bar\MyClass");

指向的是同一個記憶體位址,(但是要是想觸發這兩個變數實例化的class的析構函數需要將這兩個變數全部銷毀才可以,詳見php物件導向中的知識總結)

單例不同於靜態方法的一點是,靜態方法會在腳本解釋的時候加載到內存,單例只有在new的時候才會加載到內存(前提是兩者的代碼都加載到內存代碼區域的時候)

自動載入:

前面有一個自動載入的解釋(php中autoload的實作機制)

當我們

實例化類別new class 

的介面方法CLASS::unc()。 subClass extends parentClass{}

這時候都會觸發自動載入函數:

當我們use 給class 起了別名後,傳遞的class name 也是別名前的class

以上就介紹了php與物件靜態方法的對比,以及關於class自動載入的分析,包括了方面的內容,更多相關內容請關注PHP中文網(www.php.cn)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn