PHP的單例模式

php的單例模式和java單例模式的比較

PHP語言是一種解釋型的腳本語言,這種運行機制使得每個PHP頁面被解釋執(zhí)行后,所有的相關資源都會被回收。也就是說,PHP在語言級別上沒有辦法讓某個對象常駐內存,這和asp.net、Java等編譯型是不同的,比如在Java中單例會一直存在于整個應用程序的生命周期里,變量是跨頁面級的,真正可以做到這個實例在應用程序生命周期中的唯一性。然而在PHP中,所有的變量無論是全局變量還是類的靜態(tài)成員,都是頁面級的,每次頁面被執(zhí)行時,都會重新建立新的對象,都會在頁面執(zhí)行完畢后被清空,這樣似乎PHP單例模式就沒有什么意義了,所以PHP單例模式我覺得只是針對單次頁面級請求時出現(xiàn)多個應用場景并需要共享同一對象資源時是非常有意義的。

代碼實現(xiàn)

class DB  
{  
    private $_db;  
    private static $_instance;  // 需要一個保存類的唯一實例的靜態(tài)成員變量
  
    private function __construct(...)  
    {  
        $this->_db = pg_connect(...); // 構造函數(shù)和克隆函數(shù)必須聲明為私有的,防止外部程序new類從而失去單例模式的意義
    }  
  
    private function __clone() {};  // 覆蓋__clone()方法,禁止克隆  
  
    public static function getInstance()  
    {  
        if(! (self::$_instance instanceof self) ) {  
            self::$_instance = new self();  
        }  
        return self::$_instance;  
    }  
  
    public function addUserInfo(...)
    {
    }
     public function getUserInfo(...)
    { 
    }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,132評論 1 32
  • 在一個方法內部定義的變量都存儲在棧中,當這個函數(shù)運行結束后,其對應的棧就會被回收,此時,在其方法體中定義的變量將不...
    Y了個J閱讀 4,435評論 1 14
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 27,588評論 1 45
  • 公司的前端要給項目的webview加一個區(qū)分,用來區(qū)別是iOS端訪問、android訪問還是在瀏覽器訪問的,說是要...
    xiao小馬哥閱讀 5,642評論 0 3
  • 1、不要貪戀沒意義的人或事,拎著垃圾的手怎么騰得出來接禮物。新的征途上,往事歸零,愛恨隨意,往事不回頭,未來不將就...
    然若一閱讀 1,374評論 0 9