單例模式(Singleton)
/*** * Class Singleton 單例模式 * 單例類不能再其它類中直接實體化,只能被其自身實體化,它不會創建實體副本,而是會向單例類內部存盤的實體回傳一個參考, * 1.私有的建構式、克隆函式,防止外部代碼new、clone * 2.私有的靜態的成員變數來保存類的實體 * 3.公共的靜態函式來訪問類的實體 */ class Singleton { private static $instance = null;//宣告一個私有的實體變數 public static function getInstance() { if (self::$instance === null) { self::$instance = new self(); } return self::$instance; } private function __construct() { } private function __clone() { } } $a = Singleton::getInstance(); $b = Singleton::getInstance(); /*判斷兩個類是否為同一個類*/ echo $a === $b ? 1 : 0; // 1 exit;
工廠模式
注冊模式
配接器模式
觀察者模式
依賴注入模式
依賴注入DI、控制反轉IOC、反射
控制反轉IOC是一種思想,依賴注入DI是實施這種思想的方法
面向介面編程
使用時實體化并建立連接
構造器注入、setter、介面注入
容器模式
迭代器iterator
迭代器實際是一個實作了Iterator的類,可以用foreach進行遍歷,
1 <?php 2 class Sample implements Iterator{ 3 private $curIndex=0; 4 private $items=null; 5 public function __construct($_items) { 6 $this->items = $_items; 7 } 8 public function current (){ 9 echo "current\n"; 10 return $this->items[$this->curIndex]; 11 } 12 public function key (){ 13 echo "key\n"; 14 return $this->curIndex; 15 } 16 public function next (){ 17 echo "next\n"; 18 $this->curIndex++; 19 } 20 public function rewind (){ 21 $this->curIndex = 0; 22 } 23 public function send ( $value ){ 24 if($value == "stop"){ 25 $this->curIndex = null; 26 } 27 } 28 public function valid (){ 29 echo "valid\n"; 30 return isset($this->items[$this->curIndex]); 31 } 32 } 33 $sample = new Sample([1,2,3]); 34 foreach ($sample as $k =>$v){ 35 }
>>>>> valid current key next
可以看到foreach 是先呼叫valid判斷迭代器是否有效,然后再呼叫current獲取當前值,同時呼叫next移動key到指向下一個值(輸出key是因為 $k=>$v的緣故),
生成器
生成器提供了一種更容易的方法來實作簡單的物件迭代,相比較定義類實作 Iterator 介面的方式,性能開銷和復雜性大大降低,
生成器允許你在 foreach 代碼塊中寫代碼來迭代一組資料而不需要在記憶體中創建一個陣列, 那會使你的記憶體達到上限,或者會占據可觀的處理時間,
相反,你可以寫一個生成器函式,就像一個普通的自定義函式一樣, 和普通函式只回傳一次不同的是, 生成器可以根據需要 yield 多次,以便生成需要迭代的值,
PHP 將會在每次需要值的時候呼叫生成器函式,并在產生一個值之后保存生成器的狀態,這樣它就可以在需要產生下一個值的時候恢復呼叫狀態,
1 <?php 2 function gen_one_to_three() { 3 for ($i = 1; $i <= 3; $i++) { 4 //注意變數$i的值在不同的yield之間是保持傳遞的, 5 yield $i; 6 } 7 } 8 $generator = gen_one_to_three(); 9 foreach ($generator as $value) { 10 echo "$value\n"; 11 } 12 var_dump($generator); //實際上是Generator物件
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17432.html
標籤:PHP
上一篇:PHP 面向物件
