模式設計是什麼?初學者一開始會被這高大上的名稱給唬住。而對於有豐富程式經驗的老鳥來說,模式設計又是無所不在。很多接觸的框架是基於各種模式設計而形成的。 簡單說,在寫程式碼的過程中一開始往往接觸的是面向過程的,簡單的基礎的程式設計。這時候我們往往追求的是程式碼能夠實現某項功能就萬事大吉。管他程式碼多麼冗餘,管他程式碼是否可重用,管他效率如何,能實現功能就好。但是,真正應用於實際的,更被大家採納的是那些高效的,可重用的,便於團隊開發的程式碼。基於這些因素,你不能像練手一樣,隨便命名函數名,隨便放腳本。模式設計告訴是給人們組織程式碼提供一個思路,實現可重複使用程式碼、讓程式碼更容易被他人理解、保證程式碼可靠性。
在所有模式設計中,有三種基礎設計模式,單例模式,工廠模式,註冊樹模式,其他模式往往基於這幾種模式,今天帶來的是單例模式。
什麼是單例模式?
根據這個名稱,我們很容易了解到,單例模式指的是整個應用中只有一個物件實例的設計模式。
為什麼要用單例模式?
php常常和資料庫打交道,如果在應用中如果頻繁建立連接對象,進行new操作的話,會消耗大料的系統記憶體資源,這並不是我們希望看到的。再則,在團隊合作專案中,單例模式可以有效避免不同程式設計師new自己的對象,造成人為的系統消耗。
如何建立單例模式?
在看到這個問題的時候,相信優秀的程式設計師很可能自己試著根據要求去創建單例模式,而不是坐等前人的經驗。有別於其他博友告訴你什麼樣的模式是單例模式,我人更願意和有物件導向程式設計基本經驗的你考慮一下如何自己建立單例模式。
我們先從題目出發,單例模式是只有一個物件實例的設計模式。這一點是很讓人蛋疼的。我們平常創建的類別不是能創建很多物件的,就是不能創建物件的(抽象類別)。要建立物件需要有類別這是必須的,而且不能是抽象類別。這個類別要防止別人可以多次創建函數。我們自然而然地考慮到了從構造函數入手。但是,每次new操作都會呼叫建構函數,也就是會多次建立物件實例。這和我們設計初衷相悖了。在此務必申明建構函式為private或protected這樣才能解決這個問題。
建構子被申明為private或protected這注定無法透過new的方法建立實例物件了。而我們發現,經過這一步處理後,解決問題的前景變得明朗起來?為什麼呢?既然無法透過new方法建立物件實例,那麼我們只能透過類別內的方法來建立物件實例了。 這時候我們面臨一個有趣的先有雞還是先有蛋的問題。我們往往往往是創建了物件後才呼叫物件的方法,而此時需要呼叫類別裡面的方法來建立物件。不受是否創建物件影響都能呼叫的方法的解決方案毋庸置疑那就是利用關鍵字--static。
在類別內建立靜態方法完成完成什麼工作呢?回歸主題:確保只建立一個實例物件。如何確保只有一個?這很簡單,if判斷一下。存在的話直接返回,不存在自己創建一個嘛。當然這個實例物件是類別的靜態屬性。至此,單例模式要求的功能實現完成。真的完成了麼?還不算~如果有個類別繼承本類,將構造方法申明為public那不又壞事兒了?那有必要在構造方法前面加final關鍵字了。
最後貼上單例模式代碼,程式碼解釋都在上面了~~
<span>php </span><span>class</span><span> Single{ </span><span>public</span><span>$hash</span><span>; </span><span>static</span><span>protected</span><span>$ins</span>=<span>null</span><span>; </span><span>final</span><span>protected</span><span>function</span><span> __construct(){ </span><span>$this</span>->hash=<span>rand</span>(1,9999<span>); } </span><span>static</span><span>public</span><span>function</span><span> getInstance(){ </span><span>if</span> (self::<span>$ins</span><span> instanceof self) { </span><span>return</span> self::<span>$ins</span><span>; } self</span>::<span>$ins</span>=<span>new</span><span> self(); </span><span>return</span> self::<span>$ins</span><span>; } }</span>
本身單例模式並不復雜,但需要深入理解。很多初學者依舊會感嘆:臥槽,構造方法原來不一直是public啊~臥槽還可以不透過new創建對像啊~其實筆者想說,不管構造方法被申明為public,private還是protected,最終創建對象的時候都會呼叫。一直是new創建對象實例,單例模式也用new創建對象,只是換個地方而已,從類別外到類別內。
最後對研究出各種精妙的模式設計的程式設計師表示拜服~~
以上就介紹了php模式設計之 單例模式,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

ThebestapproachforsendingemailsinPHPisusingthePHPMailerlibraryduetoitsreliability,featurerichness,andeaseofuse.PHPMailersupportsSMTP,providesdetailederrorhandling,allowssendingHTMLandplaintextemails,supportsattachments,andenhancessecurity.Foroptimalu

使用依賴注入(DI)的原因是它促進了代碼的松耦合、可測試性和可維護性。 1)使用構造函數注入依賴,2)避免使用服務定位器,3)利用依賴注入容器管理依賴,4)通過注入依賴提高測試性,5)避免過度注入依賴,6)考慮DI對性能的影響。

phpperformancetuningiscialbecapeitenhancesspeedandeffice,whatevitalforwebapplications.1)cachingwithapcureduccureducesdatabaseloadprovesrovessetimes.2)優化

ThebestpracticesforsendingemailssecurelyinPHPinclude:1)UsingsecureconfigurationswithSMTPandSTARTTLSencryption,2)Validatingandsanitizinginputstopreventinjectionattacks,3)EncryptingsensitivedatawithinemailsusingOpenSSL,4)Properlyhandlingemailheaderstoa

TOOPTIMIZEPHPAPPLICITIONSFORPERSTORANCE,USECACHING,數據庫imization,opcodecaching和SererverConfiguration.1)InlumentCachingWithApcutCutoredSatfetchTimes.2)優化的atabasesbasesebasesebasesbasesbasesbaysbysbyIndexing,BeallancingAndWriteExing

依賴性注射inphpisadesignpatternthatenhancesFlexibility,可檢驗性和ManiaginabilybyByByByByByExternalDependencEctenceScoupling.itallowsforloosecoupling,EasiererTestingThroughMocking,andModularDesign,andModularDesign,butquirscarecarefulscarefullsstructoringDovairing voavoidOverOver-Inje

PHP性能優化可以通過以下步驟實現:1)在腳本頂部使用require_once或include_once減少文件加載次數;2)使用預處理語句和批處理減少數據庫查詢次數;3)配置OPcache進行opcode緩存;4)啟用並配置PHP-FPM優化進程管理;5)使用CDN分發靜態資源;6)使用Xdebug或Blackfire進行代碼性能分析;7)選擇高效的數據結構如數組;8)編寫模塊化代碼以優化執行。

opcodecachingsimplovesphperforvesphpermance bycachingCompiledCode,reducingServerLoadAndResponSetimes.1)itstorescompiledphpcodeinmemory,bypassingparsingparsingparsingandcompiling.2)useopcachebachebachebachebachebachebachebysettingparametersinphametersinphp.ini,likeememeryconmorysmorysmeryplement.33)


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版
SublimeText3 Linux最新版

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。