php 設計模式 - 單例

概述:

     作為對象的創建模式,單例確保某一個內在系統中只存在一個實例,它不可以創建副本。
克隆函數(__clone )以及構造函數(__construct )必須聲明為私用, 防止外部程序 創建一個新類 ,而失去單例模式的意義。

PHP 語言是一種解釋型的語言,在頁面執行完成后,所有的相關資源都會被回收。PHP在語言級別上,不能像C#,JAVA編譯型語言一樣,沒辦法讓某個對象長距內存。
然而在單一請求場景時,還是可以通過單例模式來共享對象,比如數據庫連接對象。


class DbConnection
{private static $_instance;private static $token = 0;public static function  getInstance(){if (static::$_instance instanceof DbConnection) {return static::$_instance;}// 隨機生產一個 token 標示當前內static::$token = rand(100, 1000);static::$_instance = new DbConnection();return static::$_instance;}// 克隆函數以及構造函數必須聲明為私用,// 防止外部程序 創建一個新類 ,而失去單例模式的意義。private function  __clone(){}private function  __construct(){}public function  open(){echo "init times:" . static::$token . '<br/>';}}

  

單例與static 類的 比較:

   1、singleton 能夠很好的保持對象的面相對象,比如靜態工具類則可以使用 static。
2、單例可以實現自某接口,可以繼承自某類。靜態類也可以繼承自某類,但是就沒法使用父類里面的protect成員了。


轉載于:https://www.cnblogs.com/rhythmK/p/5520271.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287654.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287654.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287654.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

prometheus python client

為什么80%的碼農都做不了架構師&#xff1f;>>> 當我剛開始準備使用Python寫一個promethues的client的時候&#xff0c;并沒有想到過程這么麻煩。github上的大佬們也沒興趣幫我解決這些細節的問題。以下是我在使用prometheus_client遇到的一些問題&#xff0c;僅供…

php之無限極分類

http://blog.csdn.net/kankan231/article/details/8462349/轉載于:https://www.cnblogs.com/jeremyjs/p/4798169.html

【遙感數字圖像處理】實驗:遙感影像分類(監督、非監督分類)完整流程(Erdas版)

一.實驗目的: 理解計算機圖像分類的基本原理,掌握數字圖像非監督分類以及監督分類的具體方法和過程,以及兩種分類方法的區別。 二.實驗平臺:ERDAS IMAGINE 9.1 三.實驗要求:掌握非監督分類;非監督分類結果評價;監督分類;監督分類結果評價;分類后處理。 四.實驗…

mysql5.7.16安裝版_mysql數據庫5.7.16安裝版怎么安裝圖解

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云數據庫專家保駕護航&#xff0c;為用戶…

重大跨越!Windows 11 23H2 25115 推送:2023 年更新測試開啟,水印回歸

面向 Dev 頻道的 Windows 預覽體驗成員&#xff0c;微軟現已發布 Windows 11 預覽版 Build 25115。主要變化1.微軟宣布從 Dev 頻道切換到 Beta 頻道的選項正式關閉&#xff0c;Beta 頻道將繼續測試 Windows 11 版本 22H2&#xff0c;而 Dev 頻道將開啟 2023 年更新 Windows 11 …

團隊第二次沖刺第三天

已經明白自己犯錯誤的地方&#xff0c;經過今天的改正&#xff0c;成功調用數據庫儲存用戶名和密碼。 明天對于數據庫更加完善。轉載于:https://www.cnblogs.com/dotacai/p/5521506.html

Android Studio編譯提示如下attribute layout_constraintBottom_toBottomOf (aka com.luck.pictureselector:layou

1 問題 Android Studio編譯提示錯誤如下 AAPT: error: attribute layout_constraintBottom_toBottomOf (aka com.luck.pictureselector:layout_constraintBottom_toBottomOf) not found.2 解決辦法 在app的build.gradle文件里面添加依賴如下 implementation androidx.const…

《零基礎看得懂的C++入門教程 》——(4)條件判斷原來如此

一、學習目標 了解什么是條件判斷了解多個條件判斷了解輸入了解什么是邏輯與、邏輯或 目錄 預備第一篇&#xff0c;使用軟件介紹在這一篇&#xff0c;C與C使用的軟件是一樣的&#xff0c;查看這篇即可&#xff1a;《軟件介紹》 想了解編譯原理和學習方法點這篇&#xff0c;學…

Django學習筆記(4)

為什么80%的碼農都做不了架構師&#xff1f;>>> 首先提一個問題&#xff1a;在Django中如何處理CRSF(Cross-site request forgery)? 先看一下CSRF原理。 其實就是惡意網站利用正常網站的cookie去非法請求。 ##Java處理方式## 一般做法需要后臺和前端配合采取策略去…

MySQL復制--slave設置讀取binlog的位置

change_master->global_init_info->Master_info::mi_init_info->Rpl_info_handler::init_info->Rpl_info_file::do_init_info ->mi->rli->rli_init_info()->初始化./relay-bin.000001,4如果relay-log.info不存在的話&#xff0c;否則讀取//初始化mas…

【遙感數字圖像處理】實驗:遙感專題地圖制作經典流程(Erdas版)

實驗目的:掌握計算機輔助下遙感專題地圖的制作。實驗平臺:ERDAS 9.1實驗要求:掌握專題地圖的編輯;制圖文件路徑的編輯;系列地圖編輯工具的使用。實驗步驟:1 專題地圖的編輯 1.1 準備專題制圖數據 (1) 在視窗菜單條中點擊 File,選擇Open (2) 點擊 Raster Layer,打開S…

.NET版OCR緊隨PP-OCRv3重磅發布

.net版OCR地址PaddleOCRSharp&#xff1a;https://gitee.com/raoyutian/paddle-ocrsharpPaddleOCRSharp是一個基于PaddleOCR的C代碼修改并封裝的.NET的工具類庫。包含文本識別、文本檢測、基于文本檢測結果的統計分析的表格識別功能&#xff0c;同時針對小圖識別不準的情況下&a…

mysql導出二進制日志_使用mysqlbinlog提取二進制日志

MySQL binlog日志記錄了MySQL數據庫從啟用日志以來所有對當前數據庫的變更。binlog日志屬于二進制文件&#xff0c;我們可以從binlog提取出來生成可閱讀的SQL語句來重建當前數據庫以及根據需要實現時點恢復或不完全恢復。本文主要描述了如果提取binlog日志&#xff0c;并給出相…

《零基礎看得懂的C++入門教程 》——(5) 容我套個娃 循環

一、學習目標 了解循環的使用方法 目錄 預備第一篇&#xff0c;使用軟件介紹在這一篇&#xff0c;C與C使用的軟件是一樣的&#xff0c;查看這篇即可&#xff1a;《軟件介紹》 想了解編譯原理和學習方法點這篇&#xff0c;學習方法和一些原理C與C都是相同的《脫離學習誤區》 …

Android之把app作為獨立的module導入其他項目遇到的坑

1 問題 把app作為獨立的module導入其他項目 2 步驟 1)在app的里面的build.gradle里面把 apply plugin: com.android.application 替換成如下 apply plugin: com.android.library 2)注視掉build.gradle文件里面的applicationId 3)app的AndroidManifest文件中MainActiv…

【ArcGIS風暴】ArcGIS解決數字化之前創建圖層時未定義坐標系而導致數據跑偏的問題

數字化時,第一步需要創建點線面圖層,創建圖層需要指定一個地理坐標系,但如果忽略了這一步,我們數字化的適量數據時沒有坐標系的,后果很嚴重,如果數字化工作只做了一點點,可以卷土重來;如果是大量工作的話,可以采取以下補救措施,建議收藏。 注: (1)如果底圖為無任…

Android兩個注意事項.深入了解Intent和IntentFilter(兩)

深入理解Intent和IntentFiler(二)轉載請表明出處&#xff1a;http://blog.csdn.net/u012637501(嵌入式_小J的天空) 在上一篇文章中&#xff0c;我們比較具體學習了"Intent"的相關知識&#xff0c;如今將學習怎樣設置Intent對象的這些屬性以及怎樣使用他們來啟動組件。…

Oracle常用sql語句(一)

Sql的分類DDL操作數據庫表列等表基本的操作主鍵索引視圖 常用數據類型字符串類型數字類型日期類型LOB類型LONG類型 數據轉換character datenumbercharacter通用函數條件表達式Sql的分類 DDL &#xff08;Data Definition Language&#xff09;&#xff1a;數據定義語言&#xf…

ASP.NET Web API 實現客戶端Basic(基本)認證 之簡單實現

優點是邏輯簡單明了、設置簡單。 缺點顯而易見&#xff0c;即使是BASE64后也是可見的明文&#xff0c;很容易被破解、非法利用&#xff0c;使用HTTPS是一個解決方案。 還有就是HTTP是無狀態的&#xff0c;同一客戶端每次都需要驗證。 實現&#xff1a; 客戶端在用戶輸入用戶名及…

WPF|分享一個登錄界面設計

分享一個登錄界面&#xff0c;先看效果圖&#xff1a;準備文中使用到了一些圖標&#xff1a;我們可以從 iconfont[1]免費下載&#xff1a;代碼簡單說明請隨手創建一個WPF項目&#xff08;.NET Framework、.NET 5\6\7皆可&#xff09;&#xff0c;使用tree /f命令看看最終的文件…