1.工厂模式,工厂方法或者类生成对象,而不是在代码中直接new
2.单例模式,使某个类的对象仅允许创建一个
3.注册模式,全局共享和交换对象
项目文件目录
入口文件 index.php
1 <?php 2 /** 3 * Created by PhpStorm. 4 * Author: Administrator 5 * Date: 14-11-22 6 * Time: 下午3:42 7 */ 8 9 define('BASEDIR',__DIR__); 10 include BASEDIR.'/Imooc/Loader.php'; 11 spl_autoload_register('\\Imooc\\Loader::autoload'); 12 13 Imooc\Factory::CreateDatabase(); //初始化对象 14 $db=Imooc\Register::_get('db'); 15 $db->field()->where()->order()->group()->limit()->select();
自动加载类 Loader.php
1 <?php 2 /** 3 * 自动加载类 4 * Created by PhpStorm. 5 * Author: Administrator 6 * Date: 14-11-22 7 * Time: 下午4:12 8 */ 9 10 namespace Imooc; 11 12 13 class Loader { 14 15 public static function autoload($class){ 16 require_once BASEDIR.'/'.str_replace('\\','/',$class).'.php'; 17 } 18 19 }
工厂类 Factory.php
1 <?php 2 /** 3 * 工厂类 4 * 5 * Created by PhpStorm. 6 * Author: Administrator 7 * Date: 14-11-22 8 * Time: 下午3:53 9 */ 10 11 namespace Imooc; 12 13 14 class Factory { 15 16 public static function CreateDatabase(){ 17 $db=Dbtabase::getInstance(); 18 Register::_set('db',$db); //注册到对象树 19 return $db; 20 } 21 22 }
注册树类 Register.php
1 <?php 2 /** 3 * 注册树类 4 * 5 * Created by PhpStorm. 6 * Author: Administrator 7 * Date: 14-11-22 8 * Time: 下午5:04 9 */ 10 11 namespace Imooc; 12 13 14 class Register { 15 16 protected static $Objects; 17 18 /** 19 * 注册到对象树 20 * 21 * @param $alias 对象映射 22 * @param $object 对象 23 */ 24 public static function _set($alias,$object){ 25 self::$Objects[$alias]=$object; 26 } 27 28 /** 29 * 获取对象树对象 30 * 31 * @param $alias 对象映射 32 * @return mixed 33 */ 34 public static function _get($alias){ 35 return self::$Objects[$alias]; 36 } 37 38 /** 39 * 注销对象树对象 40 * 41 * @param $alias 对象映射 42 */ 43 public static function _unset($alias){ 44 unset(self::$Objects[$alias]); 45 } 46 47 }
数据库操作类 Dbtabase.php
1 <?php 2 /** 3 * 数据库操作类 4 * 5 * Created by PhpStorm. 6 * Author: Administrator 7 * Date: 14-11-22 8 * Time: 下午4:05 9 */ 10 11 namespace Imooc; 12 13 14 class Dbtabase { 15 16 private static $_instance; 17 18 protected $option=array(); 19 20 /** 21 * 构造方法 22 */ 23 private function __construct(){ 24 25 } 26 27 /** 28 * 单例模式创建对象 29 * 30 * @return Dbtabase 31 */ 32 public static function getInstance(){ 33 if(!(self::$_instance instanceof self)){ 34 self::$_instance = new self; 35 } 36 return self::$_instance; 37 } 38 39 public function __set($key,$value){ 40 $this->option[$key]=$value; 41 } 42 43 public function __get($key){ 44 return $this->option[$key]; 45 } 46 47 /** 48 * 调用不存在方法名时回调函数 49 * 50 * @param $func 方法名 51 * @param $param 参数 52 * @return string 53 */ 54 public function __call($func,$param){ 55 return "magic function\n"; 56 } 57 58 /** 59 * 调用不存在静态方法名时回调函数 60 * 61 * @param $func 方法名 62 * @param $param 参数 63 * @return string 64 */ 65 public static function __callStatic($func,$param){ 66 return "magic static function\n"; 67 } 68 69 /** 70 * 打印对象时回调函数 71 * 72 * @return string 73 */ 74 public function __toString(){ 75 return __CLASS__; 76 } 77 78 /** 79 * 将对象当函数使用时回调函数 80 * 81 * @param $param 参数 82 */ 83 public function __invoke($param){ 84 return "invoke"; 85 } 86 87 /** 88 * 析构方法 89 */ 90 function __destruct(){ 91 92 } 93 94 public function field(){ 95 return $this; 96 } 97 98 public function where(){ 99 return $this; 100 } 101 102 public function order(){ 103 return $this; 104 } 105 106 public function group(){ 107 return $this; 108 } 109 110 public function limit(){ 111 return $this; 112 } 113 114 public function select(){ 115 return $this; 116 } 117 118 }
前台项目控制器类 index.php
1 <?php 2 /** 3 * Created by PhpStorm. 4 * Author: Administrator 5 * Date: 14-11-22 6 * Time: 下午5:57 7 * 8 _ooOoo_ 9 o8888888o 10 88" . "88 11 (| -_- |) 12 O\ = /O 13 ____/`---'\____ 14 .' \\| |// `. 15 / \\||| : |||// \ 16 / _||||| -:- |||||- \ 17 | | \\\ - /// | | 18 | \_| ''\---/'' | | 19 \ .-\__ `-` ___/-. / 20 ___`. .' /--.--\ `. . __ 21 ."" '< `.___\_<|>_/___.' >'"". 22 | | : `- \`.;`\ _ /`;.`/ - ` : | | 23 \ \ `-. \_ __\ /__ _/ .-` / / 24 ======`-.____`-.___\_____/___.-`____.-'====== 25 `=---=' 26 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 27 佛祖保佑 永无BUG 28 */ 29 30 namespace App\Home\Controller; 31 32 33 class index { 34 35 public function index(){ 36 echo "Hello,World!"; 37 } 38 39 }