设为首页 收藏本站
查看: 1033|回复: 0

[经验分享] PHP 设计模式 单例模式 工厂模式 注册模式

[复制链接]

尚未签到

发表于 2015-8-25 09:51:19 | 显示全部楼层 |阅读模式
  1.工厂模式,工厂方法或者类生成对象,而不是在代码中直接new
  2.单例模式,使某个类的对象仅允许创建一个
  3.注册模式,全局共享和交换对象
  项目文件目录
DSC0000.jpg
  入口文件 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 }
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103895-1-1.html 上篇帖子: PHP错误:Forbidden You don't have permission to access / on this server. 下篇帖子: PHP程序员的技术成长规划
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表