幾個關鍵點:
1,物件p應該可以被系統中的任何物件使用
2,物件p不應該被儲存在會被覆寫的全域性變數總
3,系統中不應該超過乙個p物件,也就是說,y物件可以設定p物件的乙個屬性,而z物件不需要通過其他物件(假如y和z都可以訪問p物件)就可以直接獲得該屬性的值
實現:下面建立了乙個無法從其自身外部來建立例項的類,聽起來有些難,其實只要簡單的定義乙個私有的構造方法即可:
<?phpclass
p
public
function setproperty($key,$val
)
public
function getproperty($key
)}
上面的類,由於構造方法被設定為私有,客戶端**無法例項化物件。因此setproperty和getproperty方法目前也是多餘的。
不過我們可以使用靜態方法和靜態熟悉來例項化物件:
<?phpclass
p
return self::$instance
; }
private
function
__construct(){}
public
function setproperty($key,$val
)
public
function getproperty($key)}
$pref = p::getinstance();
$pref->setproperty("name","mattttttt");
var_dump($pref
);unset($pref);//
移除引用
$pref2 = p::getinstance();
var_dump($pref2
);$pref2->setproperty("name","masssssssssssss");
var_dump($pref2
$pref2->getproperty("name");//
該屬性值並沒有丟失
//輸出 matttttttt
PHP單例模式
模式對於oop開發人員尤其有用,因為他有助於建立穩定的api,並且仍然保持一定的靈活度。一種模式可以幫助我們定義負責完成特定任務的物件,還可以允許我們全部修改掉某個類而不用修改與這些類打交道的 前者被稱為類的職責,後者被稱為類的多型性。單例模式被當作職責模式,他用來在應用程式中建立乙個單一的功能訪問...
php單例模式
單例模式 單例類 1 建構函式需要標記為private 訪問控制 防止外部 使用new操作符建立物件 單例類不能在其他類中例項化,只能被其自身例項化 2 擁有乙個儲存類的例項的靜態成員變數 3 擁有乙個訪問這個例項的公共的靜態方法 常用getinstance 方法進行例項化單例類,通過instanc...
php 單例模式
單例模式 身份證號碼 單例類identitycardno 身份證號碼類 class identitycardno public function getinstance else return self instance private function setidentitycardno no p...