本文實例分析了PHP設計模式之單例模式。分享給大家供大家參考,具體如下:
單例模式(Singleton Pattern 單件模式或單元素模式),是常見的一種設計模式,它有三個特點
下面用PHP代碼實現一下
<?PHP/** * Created by PHPStorm. * User: tiansi * Date: 18/1/2 * Time: 下午3:40 */class Signleton{ private static $_instanse = null; //私有化構造方法 防止外界使用new實例化對象 private function __construct() { } //私有化克隆方法 防止外界克隆對象 private function __clone() { // TODO: Implement __clone() method. } //靜態化 提供單例訪問入口 static function getInstance(){ if (is_null(self::$_instanse) || !isset(self::$_instanse)){ self::$_instanse = new self(); } return self::$_instanse; } public function say(){ echo 'I am signleton'; }}
下面試一下調用
<?PHP/** * Created by PHPStorm. * User: tiansi * Date: 18/1/2 * Time: 下午3:48 *///第一種方式會報錯 因為把構造方法私有化了//PHP Fatal error: Uncaught Error: Call to private Signleton::__construct() from invalid context in /Users/apple/uxin/SignletonController.PHP:11/*$signleton1 = new Signleton();$signleton1->say();*///上述代碼報錯:Fatal error: Call to private Signleton::__construct() //實例化成功 輸出I am signleton$signleton2 = Signleton::getInstance();$signleton2->say();
運行結果:
I am signleton
它的優缺點
優點:
缺點:
這是單例模式的優缺點,因為語言類型的不同,PHP的單例模式又不一樣
眾所周知,PHP語言是一種解釋型的腳本語言,這種運行機制使得每個PHP頁面被解釋執行后,所有的相關資源都會被回收。也就是說,PHP在語言級別上沒有辦法讓某個對象常駐內存,這和asp.net、Java等編譯型是不同的,比如在Java中單例會一直存在于整個應用程序的生命周期里,變量是跨頁面級的,真正可以做到這個實例在應用程序生命周期中的唯一性。然而在PHP中,所有的變量無論是全局變量還是類的靜態成員,都是頁面級的,每次頁面被執行時,都會重新建立新的對象,都會在頁面執行完畢后被清空,這樣似乎PHP單例模式就沒有什么意義了,所以PHP單例模式我覺得只是針對單次頁面級請求時出現多個應用場景并需要共享同一對象資源時才有用
比如
1.應用程序與數據庫交互
一個應用中會存在大量的數據庫操作,比如過數據庫句柄來連接數據庫這一行為,使用單例模式可以避免大量的new
操作,因為每一次new操作都會消耗內存資源和系統資源。
2.控制配置信息
如果系統中需要有一個類來全局控制某些配置信息, 那么使用單例模式可以很方便的實現
希望本文所述對大家PHP程序設計有所幫助。
新聞熱點
疑難解答
圖片精選