PHP單例模式--典型的三私一公
阿新 • • 發佈:2018-12-11
單例模式:即一個類只被例項化一次,當其他人對其再次例項化時,便返回第一次例項化的物件。這種模式可以極大地節約資源。典型應用於資料庫類的例項化。 以例項化一個Mysql資料庫類為例: 要實現一個類只例項化一次,就必須堵住其他例項化的入口。 1.例項化類時,會自動呼叫類的構造方法,因為將構造方法設定為private屬性,限制為只能在類內部例項化
private function __construct(){
}
2.定義一個靜態方法,在類內部例項化物件。例項化前先判斷該類是否已被例項化了,若已被例項化,就返回該例項化物件;若沒被例項化,便例項化一個物件並將該物件儲存在類的靜態屬性中
private static $self = null; public static function create(){ if (self::$self === null) { self::$self = new self(); } return self::$self; }
3.禁止克隆,物件之間進行克隆可生成不同的物件。而克隆時會自動呼叫類的__conle方法,因此將克隆方法設定為private屬性
private function __clone(){
}
綜上,三私一公(三個私有屬性和一個公共方法)單例模式的程式碼如下:
class Mysql { private static $self = null; public static function create(){ if (self::$self === null) { self::$self = new self(); } return self::$self; } private function __construct(){ } private function __clone(){ } } $a = Mysql::create(); $b = Mysql::create(); /*判斷兩個類是否為同一個類*/ echo $a===$b ? 1 : 0;