您好,登錄后才能下訂單哦!
這篇文章主要介紹“PHP中的單例模式是什么”,在日常操作中,相信很多人在PHP中的單例模式是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP中的單例模式是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
單例模式
定義:簡單的說,整個應用一次訪問流程中只有一個實例對象的設計模式。
我對單例模式的理解就是可以減少new的操作,因為new操作的時候會消耗內存,如果進行大量的new操作,就會消耗大量的內存。
例如:
class abc {
}
$a = new abc;
$b = new abc;
$c = new abc;
$d = new abc;
echo "內存初始: ".memory_get_usage()."B\n";
echo '< pre>';
var_dump($a);
echo '< /pre>';
echo "內存使用: ".memory_get_usage()."B\n";
echo '< pre>';var_dump($b);
echo '< /pre>';
echo "內存使用: ".memory_get_usage()."B\n";
echo '< pre>';var_dump($c);
echo '< /pre>';
echo "內存使用: ".memory_get_usage()."B\n";
echo '< pre>';var_dump($d);
echo '< /pre>';
echo "內存使用: ".memory_get_usage()."B\n";
echo "峰值: ".memory_get_peak_usage()."B\n"
輸出結果:
內存初始:126352B
object(abc)#1 (0){
}
內存使用:126392B
object(abc)#2 (0){
}
內存使用:126440B
object(abc)#3 (0){
}
內存使用:126488B
object(abc)#4 (0){
}
內存使用:126536B 峰值:127040B
這里每一次new 操作就會增加內存的占用。而使用單例模式則不會造成這種情況。
單例模式的要點
1.某個類只能有一個實例。
2.必須自行創建這個實例。
3.必須自行向整個系統提供這個實例。
下面是創建一個單例類的示例:
/** * @purpose: 創建一個單例類 * Class Single */
class Single {
/** * @var Object 保存類實例的靜態成員變量 */
private static $_instance;
/** * Single constructor. 私有的構造方法 */
private function __construct(){
echo 'This is a Constructed method;'; }
/** * @purpose: 創建私有__clone方法防止對象被復制克隆 */
private function __clone(){ }
/** * @return Single|Object 單例方法,用于訪問實例的公共的靜態方法 */
public static function getInstance(){
if(!(self::$_instance instanceof self)){
self::$_instance = new self; }
return self::$_instance; }
}
現在我們進行實例化輸出:
This is a Constructed method;
內存初始:129456B
object(abc)#1 (0){
}
內存初始:129504B
object(abc)#1 (0){
}
內存初始:129504B
object(abc)#1 (0){
}
內存初始:129504B
object(abc)#1 (0){
}
內存初始:129504B
這里可以看出就算多次實例化內存也沒有進行增長;
單例模式的用處
1.單例模式可以應用在數據庫的操作類上。
2.單例模式可應用在網站的計數器上。
3.應用程序的日志應用,一般都使用單例模式實現,這一般是由于共享的日志文件一直處于打開狀態,因為只能有一個實例去操作,否則內容不好追加。
4.Web應用的配置對象的讀取,一般也應用單例模式,這個是由于配置文件是共享的資源。
到此,關于“PHP中的單例模式是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。