【設計模式】PHP單例模式的應用場景與實現
摘要
什麼是單例模式?
一個類別只允許建立一個物件(或實例),那麼這個類別就是一個單例類,這種設計模式就叫作單例設計模式,簡稱單例模式。
為什麼要使用單例?
-
處理資源存取衝突。
例如:往檔案中列印日誌的功能。
表示全域唯一類別。
從業務概念上,如果某些資料在系統中只應保存一份,那就比較適合設計為單例類別。例如:唯一遞增 ID 號碼產生器。
實作方式
# 實作php的單例模式需要三個步驟
# * 一個靜態成員變量,用來保存類別。
* 為防止物件建立或克隆,需要吧__construct和__clone宣告為私有。
* 一個存取這個實例的公共的靜態方法,通常為getInstance
class single { private static $instance ; private function __construct(){} private function __clone(){} public static function getInstance() { if (empty(self::$instance)) { self::$instance = new single(); } return self::$instance; } }
給單例類別加上一個方法,取得ID。一個全域唯一的id號碼產生器就出現了。
class single { private $id = 0; private static $instance ; private function __construct(){} private function __clone(){} public static function getInstance() { if (empty(self::$instance)) { self::$instance = new single(); } return self::$instance; } public function getId() { return $this->id++; } }
真是無懈可擊,那麼在多執行緒的情況下發生了什麼事?
實作一個執行緒唯一的單例
#這裡不得不提到php的ts和nts版本區別,nts(Non Thread Safe)單線程構建,線程間共用快取資料。 ts(Thread Safe)具有多執行緒功能的構建,多個執行緒間使用不同的資料副本。
使用ts版本的php自動升級為執行緒安全模式,pthreads擴充只能安裝在ts版本的php上。
pecl收錄的最後一個版本pthreads就是基於php7.0,github上的pthreads專案也已經停止更新,感興趣只能去7.0懷念歷史了。
我在php-7.0.9-Win32-VC14-x64 這個版本下安裝了pthreads擴充。
多執行緒的情況下,單例的範圍就從行程唯一變成了執行緒唯一了。
require 'single.php'; class Request extends Thread { public $url; public function __construct($url) { $this->url = $url; } public function run() { echo single::getInstance()->getId(); echo "\n"; } } $chG = new Request("www.google"); $chG ->start(); $chG->join(); echo $chG->getThreadId(); echo "\n"; $chB = new Request("www.baidu"); $chB ->start(); $chB->join(); echo $chB->getThreadId(); echo "\n";
這裡建立了兩個線程,但兩次執行都可以獲得從0開始的id,說明兩個執行緒內的single類別是兩個不同的單例物件。
總結
實作php的單例模式需要三個步驟
* 一個靜態成員變量,用來保存類別。
* __construct和__clone宣告為私有,防止創造或複製。
* 一個靜態方法,通常為getInstance,用來存取這個實例。
php的多執行緒我也沒用過,看起來是條不歸路,不知道大家怎麼看。
以上是【設計模式】PHP單例模式的應用場景與實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JS 單例模式是常用的設計模式,它可以保證一個類別只有一個實例。這種模式主要用於管理全域變量,避免命名衝突和重複加載,同時也可以減少記憶體佔用,提高程式碼的可維護性和可擴展性。

單例模式:透過函數重載提供不同參數的單例實例。工廠模式:透過函數重寫建立不同類型的對象,實現創建過程與特定產品類別的解耦。

在軟體開發中,常常遇到多個物件需要存取同一個資源的情況。為了避免資源衝突以及提高程式的效率,我們可以使用設計模式。其中,單例模式是一種常用的創建物件的方式,即保證一個類別只有一個實例,並提供全域存取。本文將為大家介紹如何使用PHP實作單例模式,並提供一些最佳實務的建議。一、什麼是單例模式單例模式是一種常用的創建物件的方式,它的特點是保證一個類別只有一個實例,並提

PHP中單例模式的線程安全性問題思考在PHP程式設計中,單例模式是一種常用的設計模式,它可以確保一個類別只有一個實例,並且提供一個全域的存取點來存取這個實例。然而,在多執行緒環境下使用單例模式時,需要考慮線程安全性的問題。單例模式的最基本實作包括一個私有的建構子、一個私有的靜態變數和一個公有的靜態方法。具體程式碼如下:classSingleton{pr

Singleton模式確保一個類別只有一個實例,並提供了一個全域的存取點。它確保在應用程式中只有一個物件可用,並處於受控狀態。 Singleton模式提供了一種訪問其唯一物件的方式,可以直接訪問,而無需實例化類別的物件。範例<?php classdatabase{ publicstatic$connection; privatefunc

導言PHP設計模式是一組經過驗證的解決方案,用於解決軟體開發中常見的挑戰。透過遵循這些模式,開發者可以創建優雅、健壯和可維護的程式碼。它們可協助開發者遵循SOLID原則(單一職責、開放-封閉、Liskov替換、介面隔離和依賴反轉),從而提高程式碼的可讀性、可維護性和可擴展性。設計模式的類型有許多不同的設計模式,每種模式都有其獨特的目的和優點。以下是一些最常用的php設計模式:單例模式:確保一個類別只有一個實例,並提供一種全域存取此實例的方法。工廠模式:建立一個對象,而不指定其確切類別。它允許開發者根據條件

單例模式在PHP框架中的擴展與自訂【引言】單例模式是一種常見的設計模式,它保證類別在整個應用程式中只能實例化一次。在PHP開發中,單例模式的應用非常廣泛,特別是在框架的開發和擴展。本文將介紹如何在PHP框架中擴展和自訂單例模式,並提供具體的程式碼範例。 【什麼是單例模式】單例模式是指一個類別只能有一個物件實例存在,並提供一個全域存取點供外部使用。在PHP開發中,通

1.什麼是PHP設計模式? PHP設計模式是預先定義的程式碼模板,旨在解決常見的軟體開發問題。它們提供了經過驗證的解決方案,可以提高程式碼的可重複使用性、可維護性和可擴充性。 2.PHP設計模式的類型php中有許多不同的設計模式,每種模式都有其特定的用途。最常見的模式包括:單例模式:確保一個類別只有一個實例。工廠模式:根據傳給它的資料建立不同類型的物件。策略模式:允許程式在運行時更改其行為。觀察者模式:允許物件訂閱事件並在事件發生時獲得通知。 3.單例模式範例classSingleInstance{private
