1.单例模式
1 <?php 2 class Mysql{ 3 private static $instance = null; 4 private $conn; 5 //构造方法,设置为private,不允许通过new获得对象 6 private function __construct(){ 7 $conn = mysql_connect("localhost", "root", ""); 8 } 9 public static function getInstance(){ 10 if(!self::$instance instanceof self){ 11 self::$instance = new self; 12 } 13 return self::$instance; 14 } 15 //阻止用户复制对象实例 16 private function __clone(){} 17 } 18 $db = Mysql::getInstance(); 19 ?>
2.工厂模式
1 <?php 2 //定义个抽象类,让子类去继承实现它 3 abstract class Operation{ 4 abstract public function getValue($num1, $num2);//子类必须实现此方法 5 } 6 7 //加法类 8 class OperationAdd extends Operation{ 9 public function getValue($num1, $num2){ 10 return $num1+$num2; 11 } 12 } 13 //减法类 14 class OperationSub extends Operation{ 15 public function getValue($num1, $num2){ 16 return $num1-$num2; 17 } 18 } 19 //乘法类 20 class OperationMul extends Operation{ 21 public function getValue($num1, $num2){ 22 return $num1*$num2; 23 } 24 } 25 //除法类 26 class OperationDiv extends Operation{ 27 public function getValue($num1, $num2){ 28 try{ 29 if($num2 == 0){ 30 throw new Exception("除数不能为0"); 31 }else{ 32 return $num1/$num2; 33 } 34 }catch(Exception $e){ 35 echo "错误信息:".$e->getMessage(); 36 } 37 } 38 } 39 /** 40 * 工厂类,主要用来创建对象 41 * 功能:根据输入的运算符号,工厂就能实例出合适的对象 42 */ 43 class Factory{ 44 public static function createObj($operate){ 45 switch($operate){ 46 case '+': 47 return new OperationAdd(); 48 break; 49 case '-': 50 return new OperationSub(); 51 break; 52 case '*': 53 return new OperationMul(); 54 break; 55 case '/': 56 return new OperationDiv(); 57 break; 58 } 59 } 60 } 61 $test=Factory::createObj('/'); 62 $result=$test->getValue(23,0); 63 echo $result; 64 ?>
3.观察者模式
1 <?php 2 /** 3 * 观察者模式 4 */ 5 class Paper{ 6 private $_observers = array(); 7 8 public function register($sub){ 9 $this->_observers[] = $sub; 10 } 11 12 public function trigger(){ 13 if(!empty($this->_observers)){ 14 foreach($this->_observers as $observer){ 15 $observer->update(); 16 } 17 } 18 } 19 } 20 21 interface Observerable(){ 22 public function update(); 23 } 24 25 class Subscriber implements Observerable{ 26 public function update(){ 27 echo "OK"; 28 } 29 } 30 31 $paper = new Paper(); 32 $paper->register(new Subscriber()); 33 $paper->trigger(); 34 ?>
4.命名链模式