PHP 設計模式 單例模式(Singleton)

2021-07-27 03:51:10 字數 1363 閱讀 6800

<?php  

class singleton

private function __clone()

public static function getinstance()

return self::$_instance;

} public function test()

} /*例1:*/

$a=singleton::getinstance();//例項化類 不能$a = new singleton();//由於__construct是private型別,所以會報錯

$a->test();

//最終輸出 "construct!test!"

/*例2:*/

$a=singleton::getinstance();

$a->test();

$b = singleton::getinstance();

$b->test();

//最終輸出 "construct!test!test!"

舉個栗子,感受下self和static(動態繫結)的區別

<?php

class a

protected function __clone() {}

public function getinstance()

return self::$_instance;

}}class b extends a

$a = a::getinstance();

$b = b::getinstance();

var_dump($a === $b);//true

class c

protected function __clone() {}

public function getinstance()

return static::$_instance;

}}class d extends c

$c = c::getinstance();

$d = d::getinstance();

var_dump($c === $d);//false

將__construct方法設為私有,可以保證這個類不被其他人例項化。但這種寫法乙個顯而易見的問題是:**不能復用。比如我們在乙個乙個類繼承a,self的引用是在類被定義時就決定的,也就是說,繼承了b的a,他的self引用仍然指向a。為了解決這個問題,在php 5.3中引入了後期靜態繫結的特性。簡單說是通過static關鍵字來訪問靜態的方法或者變數,與self不同,static的引用是由執行時決定。

php設計模式 單例模式

靜態方法所訪問的屬性也必須是static的。靜態方法呼叫靜態變數使用方式是self 靜態變數名 靜態方法呼叫靜態方法使用方式是self 靜態方法名 類的例項可以訪問靜態方法,但不可以訪問靜態變數 package name subpackage name category name author ad...

PHP設計模式 單例模式

單例模式就是保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。通常我們可以讓乙個全域性變數使得乙個物件被訪問,但是不能防止你例項化多個變數,乙個最好的辦法就是讓類自身負責儲存它的唯一例項,這個類可以保證沒有其它例項可被建立,並且他可以提供乙個訪問該例項的方法。下面提供兩種單例模式的例子 例1 ...

PHP設計模式 單例模式

單例模式的必要性 1.目的 確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。2.要點 1 某乙個類只能有乙個例項 2 必須自行建立這個例項 3 必須自行向整個系統提供這個例項。3.作用 避免重複例項化,節省系統資源。例如在資料庫操作方面,會大量存在資料庫連線操作,單例類可以避免多次...