PHP之單例模式

vn3688 8年前發布 | 17K 次閱讀 單例模式 PHP PHP開發

單例模式屬于創建型模式,何為創建型模式,即創建型模式抽象了實例化過程。他們幫助一個系統獨立于如何創建、組合和表示他的那些對象。一個類創建型模式使用繼承改變被實例化的類。而一個對象創建型模式將實例化委托給另一個對象

概述:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點

使用前提:

1 構造函數需要標記為private(訪問控制:防止外部代碼使用new操作符創建對象),單例類不能在其他類中實例化,只能被其自身實例化。

2 擁有一個保存類的實例的靜態成員變量

3 擁有一個訪問這個實例的公共的靜態方法(常用getInstance()方法進行實例化單例類,通過instanceof操作符可以檢測到類是否已經被實例化)

4 需要創建__clone()方法防止對象被復制(克隆)

為什么要使用單例模式?

1 php的應用主要在于數據庫應用,所以一個應用中會存在大量的數據庫操作,使用單例模式,則可以避免大量的new操作消耗的資源

2 如果系統中需要有一個類來全局控制某些配置信息, 那么使用單例模式可以很方便的實現. Config

3 在一次頁面請求中, 便于進行調試, 因為所有的代碼(例如數據庫操作類db)都集中在一個類中, 我們可以在類中設置鉤子, 輸出日志,從而避免到處var_dump, echo。

代碼實例

try{
$singleObj = \haibao\design\web\common\design\single\Single::getInstance();
//$singleObj1 = clone $singleObj;
echo $singleObj->getData();
}catch (\Exception $e){
echo $e->getMessage();exit;
}
<?php
namespace haibao\design\web\common\design\single;
class Single{
public static $_instance;
private function __construct(){
}
public function __clone(){
trigger_error('Clone is not allow!',E_USER_ERROR);
}
public static function getInstance(){
if(!(self::$_instance instanceof self)){
self::$_instance = new self;
}
return self::$_instance;
}
public function getData(){
return "<br/>".rand(1,100)."<br/>";
}
}

想閱讀更多技術文章,請訪問聽云技術博客,訪問聽云官方網站感受更多應用性能優化魔力。

來自: https://blog.tingyun.com/web/article/detail/562

 本文由用戶 vn3688 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!