這是我在php面試題中遇到的一道試題,單例模式按字面來(lái)看就是某一個(gè)類(lèi)只有一個(gè)實(shí)例,這樣做的好處還是很大的,比如說(shuō)數(shù)據(jù)庫(kù)的連接,我們只需要實(shí)例化一次,不需要每次都去new了,這樣極大的降低了資源的耗費(fèi)。 單例類(lèi)至少擁有以下三種公共元素: 必須擁有一個(gè)構(gòu)造函數(shù),并且必須被標(biāo)記為private。 擁有一個(gè)保存類(lèi)的實(shí)例的靜態(tài)成員變量。 擁有一個(gè)訪(fǎng)問(wèn)這個(gè)實(shí)例的公共的靜態(tài)方法 具體使用方面,我在下面php實(shí)例中注釋的很清楚:
- <?php
- /**
- * by www.
- */
- class Mysql{
- //該屬性用來(lái)保存實(shí)例
- private static $conn;
- //構(gòu)造函數(shù)為private,防止創(chuàng)建對(duì)象
- private function __construct(){
- $this->conn = mysql_connect('localhost','root','');
- }
- //創(chuàng)建一個(gè)用來(lái)實(shí)例化對(duì)象的方法
- public static function getInstance(){
- if(!(self::$conn instanceof self)){
- self::$conn = new self;
- }
- return self::$conn;
- }
- //防止對(duì)象被復(fù)制
- public function __clone(){
- trigger_error('Clone is not allowed !');
- }
-
- }
- //只能這樣取得實(shí)例,不能new 和 clone
- $mysql = Mysql::getInstance();
- ?>
|