PHP中用Trait封裝單例模式的實現(xiàn)
單例模式的定義
確保某一個類只有一個實例,不能重復實例,只能它自己實例化,而且向整個系統(tǒng)提供這個實例。
解決的問題
即一個類只被實例化一次,當其他人對其再次實例化時,返回第一次實例化的對象,可以避免大量的 new 操作,減少資源的消耗。
原則:四步走,三私一公
- 私有化靜態(tài)屬性
- 私有化構造方法
- 私有化克隆方法
- 公有化靜態(tài)方法
封裝背景
當項目中有多個單例類,每新建一個類,都得做三私一公的定義,就顯得有些做重復工作了,不僅僅浪費時間浪費精力,而且代碼臃腫且難維護,有沒有 更優(yōu)雅 的寫法呢?
Trait來封裝單例
php從以前到現(xiàn)在一直都是單繼承的語言,無法同時從兩個基類中繼承屬性和方法,為了解決這個問題,php出了Trait這個特性
用法: 通過在類中使用 use 關鍵字,聲明要組合的 Trait 名稱,具體的 Trait 的聲明使用 Trait關鍵詞,Trait不能被實例化。
Code示例
創(chuàng)建一個Trait
<?php /** * Trait Singleton 單例模式 */ Trait Singleton { private static $instance = null; private function __construct() { parent::__construct(); // 私有化構造方法 } private function __clone() { // 私有化克隆方法 } public function __sleep() { //重寫__sleep方法,將返回置空,防止序列化反序列化獲得新的對象 return []; } public static function getInstance() { if (!isset(self::$instance)) { self::$instance = new static();//這里不能new self(),self和static區(qū)別 } return self::$instance; } }
多繼承用法
其他類只用在代碼中 use Singleton; ,即可繼承單例了
<?php /** * Desc: 業(yè)務類1 繼承實例 */ class YieWu1 { use Singleton; // 關鍵一行代碼 public function getInfo(){ // 業(yè)務代碼 } }
<?php /** * Desc: 業(yè)務類2 繼承實例 */ class YieWu2 { use Singleton; // 關鍵一行代碼 public function getInfo(){ // 業(yè)務代碼 } }
實列調用
YieWu1::getInstance()->getInfo(); YieWu2::getInstance()->getInfo();
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我們。
上一篇:Laravel 手動開關 Eloquent 修改器的操作方法
欄 目:PHP編程
下一篇:PHP使用PDO實現(xiàn)mysql防注入功能詳解
本文標題:PHP中用Trait封裝單例模式的實現(xiàn)
本文地址:http://mengdiqiu.com.cn/a1/PHPbiancheng/11013.html
您可能感興趣的文章
- 04-02關于txt數(shù)據(jù)庫php的信息
- 04-02php本站才可以請求數(shù)據(jù) php本地數(shù)據(jù)庫
- 04-02網(wǎng)頁里php操作數(shù)據(jù)庫 php網(wǎng)頁例子
- 04-02php打印請求數(shù)據(jù) php打印輸出結果
- 04-02php數(shù)據(jù)庫地址 phpstudy 數(shù)據(jù)庫
- 04-02php插入數(shù)據(jù)庫為亂碼 php連接數(shù)據(jù)庫亂碼
- 04-02php數(shù)據(jù)庫數(shù)據(jù)相加 php數(shù)據(jù)庫添加數(shù)據(jù)語句
- 04-02php數(shù)據(jù)庫輸入變量 php里輸出數(shù)據(jù)庫數(shù)據(jù)函數(shù)
- 04-02數(shù)據(jù)權限架構思路php 數(shù)據(jù)權限設計方案
- 04-02php如何用導入數(shù)據(jù) php用來導入其他文件的語句


閱讀排行
本欄相關
- 04-02php本站才可以請求數(shù)據(jù) php本地數(shù)據(jù)庫
- 04-02關于txt數(shù)據(jù)庫php的信息
- 04-02php打印請求數(shù)據(jù) php打印輸出結果
- 04-02網(wǎng)頁里php操作數(shù)據(jù)庫 php網(wǎng)頁例子
- 04-02php插入數(shù)據(jù)庫為亂碼 php連接數(shù)據(jù)庫亂
- 04-02php數(shù)據(jù)庫地址 phpstudy 數(shù)據(jù)庫
- 04-02php數(shù)據(jù)庫數(shù)據(jù)相加 php數(shù)據(jù)庫添加數(shù)據(jù)
- 04-02數(shù)據(jù)權限架構思路php 數(shù)據(jù)權限設計方
- 04-02php數(shù)據(jù)庫輸入變量 php里輸出數(shù)據(jù)庫數(shù)
- 04-02php如何用導入數(shù)據(jù) php用來導入其他文
隨機閱讀
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實例總結
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05織夢dedecms什么時候用欄目交叉功能?