PHP常用的三种设计模式


Posted in PHP onFebruary 17, 2017

一、首先来看,单例模式

所谓单例模式,即在应用程序中只会有这个类的一个实例存在。

通常单例模式用在仅允许数据库访问对象的实例中,从而防止打开多个数据库连接。

一个单例类应包括以下几点:

和普通类不同,单例类不能被直接实例化,只能是由自身实例化。因此,要获得这样的限制效果,构造函数必须标记为private。

要让单例类不被直接实例化而能起到作用,就必须为其提供这样的一个实例。因此,就必须要让单例类拥有一个能保存类的实例的私有静态成员变量和对应的一个能访问到实例的公共静态方法。

在PHP中,为防止对单例类对象的克隆来打破单例类的上述实现形式,通常还为基提供一个空的私有__clone()方法。

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

单例模式是一种常见的设计模式,在计算机系统中,线程池、缓存、日志对象、对话框、打印机、数据库操作、显卡的驱动程序常被设计成单例。

单例模式分3种:懒汉式单例、饿汉式单例、登记式单例。

单例模式有以下3个特点:

1.只能有一个实例。

2.必须自行创建这个实例。

3.必须给其他对象提供这一实例。

那么为什么要使用PHP单例模式?

PHP一个主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的new操作。因为每一次new操作都会消耗系统和内存的资源。

在以往的项目开发中,没使用单例模式前的情况如下:未完....

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
PHP 异步执行方法,模拟多线程的应用分析
Jun 03 PHP
解析php 版获取重定向后的地址(代码)
Jun 26 PHP
php批量更改数据库表前缀实现方法
Oct 26 PHP
js代码实现微博导航栏
Jul 30 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
Nov 16 PHP
thinkPHP模板中for循环与switch语句用法示例
Nov 30 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 PHP
PHP implode()函数用法讲解
Mar 08 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
Apr 03 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
May 08 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
Mar 02 PHP
PHP Ajax跨域问题解决方案代码实例
Aug 01 PHP
轻松实现php文件上传功能
Feb 17 #PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
Feb 17 #PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
Feb 17 #PHP
php使用parse_str实现查询字符串解析到变量中的方法
Feb 17 #PHP
php使用str_shuffle()函数生成随机字符串的方法分析
Feb 17 #PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
Feb 17 #PHP
PHP中单例模式与工厂模式详解
Feb 17 #PHP
You might like
PHP中英混合字符串截取函数代码
2011/07/17 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
JavaScript 字符串乘法
2009/08/20 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
利用JavaScript实现新闻滚动效果(实例代码)
2013/11/27 Javascript
jQuery标签编辑插件Tagit使用指南
2015/04/21 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
基于JavaScript实现在新的tab页打开url
2016/08/04 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
[02:15]2015国际邀请赛选手档案IG.Ferrari 430
2015/07/30 DOTA
python利用datetime模块计算时间差
2015/08/04 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
应届大学生自荐信
2013/12/05 职场文书
致跳远、跳高运动员广播稿
2014/01/09 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
工作失职检讨书(精华篇)
2014/10/15 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
2015年销售助理工作总结
2015/05/11 职场文书
学校少先队工作总结
2015/08/12 职场文书
Python实现天气查询软件
2021/06/07 Python
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers