## **單例模式**
單例模式確保某個類只有一個實例,而且自行實例化并向整個系統提供這個實例。
> 單例模式是一種常見的設計模式,在計算機系統中,線程池、緩存、日志對象、數據庫操作、顯卡的驅動程序常被設計成單例。
## 單例模式3個特點
* 1. 只能有一個實例。
* 2. 必須自行創建這個實例。
* 3. 必須給其他對象提供這一實例
## 為什么要使用PHP單例模式?
> PHP一個主要應用場合就是應用程序與數據庫打交道的場景
> 在一個應用中會存在大量的數據庫操作,針對數據庫句柄連接數據庫的行為,使用單例模式可以避免大量的new操作。因為每一次new操作都會消耗系統和內存的資源。
## 單例模式設計代碼實現
~~~
class Single{
private $name = '';
private static $instance;
//構造方法設置為私有方法,禁止外部new操作
private function __construct()
{
}
private function __clone()
{
}
public static function getInstance(){
if(!self::$instance) self::$instance = new self();
return self::$instance;
}
public function setName($name){
$this->name = $name;
}
public function getName(){
return $this->name;
}
}
$singleA = Single::getInstance();
$singleB = Single::getInstance();
$singleA->setName('tom');
$singleB->setName('jack');
echo $singleA->getName();//輸出jack
echo $singleB->getName();//輸出jack
~~~
- PHP篇
- 函數傳值和傳引用的區別
- 簡述PHP的垃圾回收機制
- 簡述CGI、FAST-CGI、PHP-FPM的關系
- 常見正則表達式
- 多進程寫文件,如何保證都寫成功
- php支持回調函數的數組函數
- MySQL篇
- MySQL的兩種存儲引擎區別
- 事務的四大特性
- 數據庫事務隔離級別
- 什么是索引
- 索引有哪些數據結構,優缺點
- 索引的一些潛規則
- SQL的優化方案
- 簡述MySQL的鎖機制
- 死鎖是怎么產生的?怎么解決?
- 簡述MySQL的主從復制過程,延遲問題怎么解決
- 分布式事務的解決方案
- 數據庫中間件MyCat
- Linux篇
- Linux常用命令
- 對日志文件的IP出現的次數進行統計,并顯示次數最多的前5名
- WEB篇
- 跨域是怎么產生的,如何解決跨域
- Redis篇
- redis介紹
- redis和memcached區別
- redis的持久化方案
- 緩存穿透、擊穿、雪崩、預熱、更新、降級
- 網絡篇
- 計算機網絡體系結構
- 簡述TCP的三次握手、四次揮手過程
- UDP、TCP 區別,適用場景
- HTTP常見狀態碼含義
- 設計模式篇
- 單例模式
- 簡單工廠模式
- 抽象工廠模式
- 觀察者模式
- 策略模式
- 注冊模式
- 適配器模式
- 安全篇
- 跨站腳本攻擊(XSS)
- 跨站點請求偽造(CSRF)
- SQL 注入
- 應用層拒絕服務攻擊
- PHP安全
- 運維篇
- docker面試題
- 消息隊列篇
- 架構篇
- 數據結構與算法篇