php單例模式的簡單實現方法
<?php /**
* 設計模式之單例模式
* $_instance必須宣告為靜態的私有變數
* 建構函式和析構函式必須宣告為私有,防止外部程程式設計客棧序new
* 類從而失去單例模式的意義
* getinstance()方法必須設定為公有的,必須呼叫此方法
* 以返回例項的乙個引用
* ::操作符只能訪問靜態變數和靜態函式
* new物件都會消耗記憶體
* 使用場景:最常用的地方是資料庫連線。
* 使用單例模式生成乙個物件後,
* 該物件可以被其它眾多物件所使用。
*/class example
//單例方法
public static functedsyidzion singleton()
return self::$_instance; }
//阻止使用者複製物件例項
public function __clone()
function test() }
// 這個寫法會出錯,因為構造方法被宣告為private
$test = new example;
// 下面將得到example類的單例物件
$test = example::singleton();
$test->test();
// 複製物件將導致乙個e_user_error.
$test_clone = clone $test;
?>
首先我們要知道明確單例模式這個概念,那麼什麼是單例模式呢?
單例模式顧名思義,就是只有乙個例項。
作為物件的建立模式, 單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項,
這個類我們稱之為單例類。
單例模式的要點有三個:
一是某個類只能有乙個例項;
二是它必須自行建立這個例項;
三是它必須自行向整個系統提供這個例項。
下面我們討論下為什麼要使用php單例模式?
多數 人都是從單例模式的字面上的意思來理解它的用途, 認為這是對系統資源的節省, 可以避免重複例項化, 是一種"計畫生育". 而php每次執行完頁面都是會從記憶體中清理掉所有的資源. 因而php中的單例實際每次執行都是需要重edsyidz新例項化的, 這樣就失去了單例重複例項化的意義了. 單單從這個方面來說, php的單例的確有點讓各位失望. 但是單例僅僅只有這個功能和應用嗎? 答案是否定的,我們一起來看看。
1. php的應用主要在於資料庫應用, 所以乙個應用中會存在大量的資料庫操作, 在使用物件導向的方式開發時(廢話), 如果使用單例模式, 則可以避免大量的new 操作消耗的資源。
2. 如果系統中需要有乙個類來全域性控制某些配置資訊, 那麼使用單例模式可以很方便的實現. 這個可以參看zend framework的frontcontroller部分。
3. 在一次頁面請求中, 便於進行除錯, 因為所有的**(例如資料庫操作類db)都集中在乙個類中, 我們可以在類中設定鉤子, 輸出日誌,從而避免到處var_dump, echo。
本文標題: php單例模式的簡單實現方法
本文位址:
php 單例模式 多頁面,PHP單例模式的實現
單例模式的意義在於,很多時候不需要建立重複的例項。用php實現單例模式的原理是,使用乙個靜態變數儲存例項,當遇到重複的 new 操作時,直接返回靜態變數中儲存的例項。典型的應用有資料庫類,請看 class db 儲存例項的靜態變數 public static instance 構造方法私有化 不能直...
PHP實現單例模式
一.單例模式的特點 應用場景 在乙個應用中會存在大量連線資料庫的操作,如果不用單例模式,那每次都要new操作,但是每次new都會消耗大量的記憶體資源和系統資源,而且每次開啟和關閉資料庫連線都是對資料庫的一種極大考驗和浪費。二 要點 1.construct和 clone這兩個方法必須設為私有,防止外部...
php實現單例模式
概要 建立型模式 保證乙個類僅有乙個例項,並且提供乙個訪問它的全域性訪問點 gof95 特點 1 乙個類只有乙個例項 2 它必須自行建立這個例項 3 必須自行向整個系統提供這個例項 結構圖 主要角色 singleton 定義乙個instance操作,允許客戶訪問它的唯一例項。instance是乙個類...