3种基本的设计模式:
工厂模式:使用工厂方法或者类来生成对象,避免在代码中过多的New对象
1 //工厂模式就是专门用于创建对象的类或方法,比如说有很多数据库的时候:MySQl操作类和Oracle操作类..等等,我们可以直接创建一个DBFactory类来实例化不同的数据库类。
class DBFactory{
public static function createDbObject($class){
$db = new $class; //在提前写好自动加载的前提下
return $db; //记得return
}
}
单例模式:使用某个类的对象仅允许创建一次
1 //设置当前类的__construct方法为private(私有)时外部不能直接实例化 2 //调用方法: 在类中定义getInstance方法来实例化自身
注册树模式:全局共享和交换对象
1 //注册树模式,也可以叫注册模式或者注册器模式,但是注册树模式能够更加形象的体现出该模式的特性 2 //将已注册的对象放在注册树上,需要的时候直接去取,不需要的时候从注册树上删除。
Spl扩展:
1 //栈 先进后出 2 //$stack = new SplStack(); 3 //$stack->push('Hello1'); 4 //$stack->push('Hello2'); 5 //echo $stack->pop(); 6 //echo $stack->pop(); 7 8 //队列 先进先出 9 //$queue = new SplQueue(); 10 //$queue->enqueue('data1'); 11 //$queue->enqueue('data2'); 12 //echo $queue->dequeue(); 13 //echo $queue->dequeue(); 14 15 //堆 16 //$heap = new SplMinHeap(); 17 //$heap->insert('data1'); 18 //$heap->insert('data2'); 19 //echo $heap->extract(); 20 //echo $heap->extract(); 21 22 //规定长度数组 未定义为空 23 //$array = new SplFixedArray(10); 24 //$array[0] = 'key0'; 25 //$array[9] = 'key1'; 26 //var_dump($array);
如何实现链式操作:
$db->where()->order();
1 /*在类方法中加入return $this;*/ 2 class database{ 3 function where($where){ 4 return $this; 5 } 6 function order($order){ 7 return $this; 8 } 9 }
常用魔术方法:
1 function __set($key,$value) //设定属性不存在时调用 2 3 function __get($key) //读取属性不存在时调用 4 5 function __call($name, $arguments) //调用方法不存在时调用 6 7 function __callStatic($name, $arguments) //调用静态方法不存在时调用 8 9 function __toString() //类被当成字符串时应调用 10 11 function __invoke() //当尝试以调用函数的方式调用一个对象时调用