話不多說,先上程式碼
<?php
class User
{
/*
* 1、建立一個存放物件的私有化靜態變數
* 2、私有化克隆方法
* 3、私有化構造方法
* 4、建立例項化物件的唯一入口
*
* **/
private static $_instance = ``;
private function __clone(){}
private function __construct(){}
static public function getInstance()
{
if(is_null(self::$_instance) || isset(self::$_instance)){
self::$_instance = new User();
}
return self::$_instance;
}
public function getIp()
{
return $_SERVER[`SERVER_ADDR`];
}
}
$op = User::getInstance();
echo $op->getIp();
為什麼會使用單例模式?
在網上查了一下資料,記錄一下也方便自己以後檢視。
單例模式顧名思義,只有一個例項。可以節約記憶體和資源,主要是php在和資料庫打交道的時候,每new一次物件都會消耗一定的資源。
眾所周知,PHP語言是一種解釋型的指令碼語言,這種執行機制使得每個PHP頁面被解釋執行後,所有的相關資源都會被回收。也就是說,PHP在語言級別上沒有辦法讓某個物件常駐記憶體,這和asp.net、Java等編譯型是不同的,比如在Java中單例會一直存在於整個應用程式的生命週期裡,變數是跨頁面級
的,真正可以做到這個例項在應用程式生命週期中的唯一性。然而在PHP中,所有的變數無論是全域性變數還是類的靜態成員,都是頁面級的,每次頁面被執行時,都會重新建立新的物件,都會在頁面執行完畢後被清空,這樣似乎PHP單例模式就沒有什麼意義了,所以PHP單例模式我覺得只是針對單次頁面
級請求時出現多個應用場景並需要共享同一物件資源時是非常有意義的。