概述: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 類的 比較:數據庫
一、singleton 可以很好的保持對象的面相對象,好比靜態工具類則能夠使用 static。 二、單例能夠實現自某接口,能夠繼承自某類。靜態類也能夠繼承自某類,可是就無法使用父類裏面的protect成員了。