單例模式的要點有三個: 一是某個類只能有一個實例; 二是它必須自行創建這個實例; 三是它必須自行向整個系統提供這個實例。 單例模式的要點有三個: 為什麼要使用PHP單例模式 2.簡單工廠模式 ①抽象基類:類中定義抽象一些方法,用以在子類中實現 ②繼承自抽象基類的子類:實現基類中的抽象方法 ③工廠類: ...
一.單例模式
//讓該類在外界無法造對象
//讓外界可以造一個對象,做一個靜態方法返回對象
//在類裡面通過讓靜態變數控制返回對象只能是一個。
單例模式的要點有三個:
- 一是某個類只能有一個實例;
- 二是它必須自行創建這個實例;
- 三是它必須自行向整個系統提供這個實例。
- 1. php的應用主要在於資料庫應用, 一個應用中會存在大量的資料庫操作, 在使用面向對象的方式開發時, 如果使用單例模式, 則可以避免大量的new 操作消耗的資源,還可以減少資料庫連接這樣就不容易出現 too many connections情況。
- 2. 如果系統中需要有一個類來全局控制某些配置信息, 那麼使用單例模式可以很方便的實現. 這個可以參看zend Framework的FrontController部分。
- 3. 在一次頁面請求中, 便於進行調試, 因為所有的代碼(例如資料庫操作類db)都集中在一個類中, 我們可以在類中設置鉤子, 輸出日誌,從而避免到處var_dump, echo。
class cat
{
public $name;
private function __construct()
{
}
static $temp;
static function new_ob()
{
if(empty(self::$temp)){
self::$temp = new cat();
}
return self::$temp;
}
function speak(){
return "喵喵喵";
}
}
//$mao = new cat();
//如果沒有貓就造一個,然後等於新的xxx,如果有,直接等於。達到限制的目的。
//$mao;
//if (empty($mao)){
// $mao = new cat();
//}
// $xxx = $mao;
$mao = cat::new_ob();
$mao2 = cat::new_ob();
//給1貓改名字,2貓的名字輸出為1貓改的名字。此為單例。
$mao->name = "py";
2.簡單工廠模式
- ①抽象基類:類中定義抽象一些方法,用以在子類中實現
- ②繼承自抽象基類的子類:實現基類中的抽象方法
- ③工廠類:用以實例化所有相對應的子類
abstract class jsq
{
public $a;
public $b;
function yunsuan(){
}
}
//此為拓展
class jiafa extends jsq
{
function yunsuan()
{
//parent::yunsuan(); // TODO: Change the autogenerated stub
return $this ->a+$this->b;
}
}
class jianfa extends jsq
{
function yuansuan(){
return $this->a-$this->b;
}
}
class factory
{
static function create($x){
switch ($x){
case "+":
return new jiafa();
break;
case "-":
return new jianfa();
break;
}
}
}
//$j1 = new jiafa();
//$j1->a = 1;
//$j1->b = 2;
//$j1->yunsuan();
//儘量避免實例化對象,採用靜態方法獲取。
$jf = factory::create("+");
$jf->a = 1;
$jf->b = 2;
echo $jf->yunsuan();