標籤:class yun 執行 mic new php 並且 code private
單例模式:
單例模式又稱為職責模式,它用來在程式中建立一個單一功能的訪問點,通俗地說就是執行個體化出來的對象是唯一的。
所有的單例模式至少擁有以下三種公用元素:
1. 它們必須擁有一個建構函式,並且必須被標記為private
2. 它們擁有一個儲存類的執行個體的靜態成員變數
3. 它們擁有一個訪問這個執行個體的公用的靜態方法
代碼:
<?phpclass ren{ public $name; private static $dx;//儲存物件//聲明一個私人的執行個體變數 private function __construct()//聲明私人構造方法為了防止外部代碼使用new來建立對象。 {} public static function duixiang() { if(empty(self::$dx))//self關鍵字調用靜態類;靜態方法不需要執行個體化直接調用類->方法 {//聲明一個dx()靜態方法,用於檢測是否有執行個體對象 self::$dx = new ren(); } return self::$dx; }}//$shili=new ren();//報錯//$shishi=new ren();//兩者不同$r= ren::duixiang();$r->name = "xxx";var_dump($r);$r1 = ren::duixiang();var_dump($r1);?>原廠模式:
原廠模式就是一種類,具有為您建立對象的某些方法,這樣就可以使用工廠類建立對象,而不直接使用new。這樣如果想更改建立的物件類型,只需更改該工廠即可。
看代碼:
這是一個普通的類,裡面有一些方法
<?phpclass yun{ public $a; public $b; function suan() { echo "運算"; }}class jia extends yun//繼承yun{ function suan()//重寫 { return $this->a+$this->b; }}class jian extends yun{ function suan() { return $this->a-$this->b; }}class cheng extends yun{ function suan() { return $this->a*$this->b; }}?>
然後寫一個工廠類
<?phpclass gongchang{ static function chanpin($name) //給一個參數,返回一個對象 { switch ($name){ case"+"://運算式的值與結構中每個 case 的值進行比較。如果存在匹配,則執行與 case 關聯的代碼 return new jia(); break; case"-": return new jian(); break; case"*": return new jia(); break; } }}$aa = gongchang::chanpin("+");//此處找到與+相匹配的方法//給一個“*”的參數,給我返回一個類var_dump($aa);?>
php單例模式與原廠模式