PHP 设计模式 单例模式 工厂模式 注册模式

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 ImoocFactory::CreateDatabase();  //初始化对象
14 $db=ImoocRegister::_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
";
 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
";
 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 AppHomeController;
31 
32 
33 class index {
34 
35     public function index(){
36         echo "Hello,World!";
37     }
38 
39 } 
原文地址:https://www.cnblogs.com/luojianqun/p/4115466.html