今天在學習php物件導向時,看到乙個物件導向的面試題
題目是這樣的:
+++++++面試題++++++++++
請用單例設計模式方法設計類滿足如下需求:
請用 php5 **編寫類實現在每次對資料庫連線的訪問中都只能獲得唯一的乙個資料庫連線,具體連線資料庫的詳細**忽略,請寫出主要邏輯**
單例模式有幾個要點:
1.類的建構函式必須標記為 private(私有) (訪問控制:防止外部**通地new 操作符建立物件) 來能在其它類中例項化,只能在類自身中進行例項化。
private fcuntion __construc()
2.擁用乙個儲存類例項的 私有靜態成員變數
private static $ins ; //$ins 用來儲存這個類的例項
3.擁有乙個訪問這個類例項的靜態方法(常用getinstance()方法進行例項化單例類,通過instanceof操作符可以檢測到類是否已經被例項化)
4.建立 私有的__clone 方法 ,防止物件被複製。
為什麼這麼做呢?
1、php的應用主要在於資料庫應用, 所以乙個應用中會存在大量的資料庫操作, 使用單例模式, 則可以避免大量的new 操作消耗的資源。
2、如果系統中需要有乙個類來全域性控制某些配置資訊, 那麼使用單例模式可以很方便的實現. 這個可以參看zf的frontcontroller部分。
3、在一次頁面請求中, 便於進行除錯, 因為所有的**(例如資料庫操作類db)都集中在乙個類中, 我們可以在類中設定鉤子, 輸出日誌,從而避免到處var_dump, echo。
最終答案**如下
<?php
class
mysql
// 獲取例項方法
public static
function
getinstance
() return
self::$instance;
}// 禁止轉殖
private
function
__clone
(){}
}// 獲得物件
$db = mysql::getinstance();
?>
再此做一下備忘錄。
<?php
class
mysql
// 獲取例項方法
public
function
getinstance
()
return
self
::$instance;
}// 禁止轉殖
private
function
__clone
(){}
}// 獲得物件
$db = mysql::getinstance();
?>
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...