PHP中单例模式与工厂模式详解


Posted in PHP onFebruary 17, 2017

单例模式概念

单例模式是指整个应用中类只有一个对象实例的设计模式。

单例模式的特点

一个类在整个应用中只有一个实例

类必须自行创建这个实例

必须自行向整个系统提供这个实例

php中使用单例模式的原因

我用php大部分操作都是和各种数据库打交道,包括mysql,redis,memcache等各种关系型和非关系型数据库,所以一个应用中会 存在大量连接数据库的操作,如果不用单例模式,那每次都要new操作,但是每次new都会消耗大量的内存资源和系统资源,而且每次打开和关闭数据库连接都 是对数据库的一种极大考验和浪费。

需要一个保存类的唯一实例的静态成员变量(通常$instance为私有变量)

构造函数和克隆函数必须声明为私有的,为了防止外部程序new类从而失去单例模式意义

必须提供一个访问这个实例的公共静态方法,从而返回唯一实例的一个引用

//设计模式
//单例模式 都是使用同一个对象
//class Ren
//{
// public $name;
// private static $dx; //存储对象
//
// private function __construct()
// {
//
// }
//
// public static function DuiXiang()
// {
//  if(empty(self::$dx))
//  {
//   self:;$dx=new Ren();
//  }
//  return self::$dx;
// }
//}
//
//$r= Ren::DuiXiang();
//把构造函数变为私有
//做了一个方法来间接造对象
//在该方法里面加限制

工厂类

是指包含一个专门用来创建其他对象的方法的类,工厂类在多态性编程实践中是至关重要的,它允许动态的替换类,修改配置,通常会使应用程序更加灵活,熟练掌握工厂模式高级PHP开发人员是很重要的。

工厂模式通常用来返回符合类似接口的不同的类,工厂的一种常见用法就是创建多态的提供者,从而允许我们基于应用程序逻辑或者配置设置来决定应实例化哪一个类,例如,可以使用这样的提供者来扩展一个类,而不需要重构应用程序的其他部分,从而使用新的扩展后的名称 。

通常,工厂模式有一个关键的构造,根据一般原则命名为Factory的静态方法,然而这只是一种原则,工厂方法可以任意命名,这个静态还可以接受任意数据的参数,必须返回一个对象。

class YunSuan
{
 public $a;
 public $b;
 function Suan()
 {
  echo "对两个数进行运算";
 }
class gongchang
{ //功能 : 给一个参数,返回一个对象
 static function chanpin($name)
 {
  switch($name)
  {
   case "'+":
    return new jia();
    break;
   case "-";
    return new jian();
    break;
  }
 }
}
$a=gongchang::chanpin("+");

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

PHP 相关文章推荐
PHP一些常用的正则表达式字符的一些转换
Jul 29 PHP
PHP 八种基本的数据类型小结
Jun 01 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
web目录下不应该存在多余的程序(安全考虑)
May 09 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
May 15 PHP
实测在class的function中include的文件中非php的global全局环境
Jul 15 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
Feb 02 PHP
php5.3 goto函数介绍和示例
Mar 21 PHP
thinkphp验证码的实现(form、ajax实现验证)
Jul 28 PHP
PHP使用mongoclient简单操作mongodb数据库示例
Feb 08 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 PHP
Laravel框架处理用户的请求操作详解
Dec 20 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 #PHP
PHP合并数组函数array_merge用法分析
Feb 17 #PHP
yii2利用自带UploadedFile实现上传图片的示例
Feb 16 #PHP
php利用imagemagick实现复古老照片效果实例
Feb 16 #PHP
php UNIX时间戳用法详解
Feb 16 #PHP
php计算多个集合的笛卡尔积实例详解
Feb 16 #PHP
php实现文件与16进制相互转换的方法示例
Feb 16 #PHP
You might like
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
firefox插件Firebug的使用教程
2010/01/02 Javascript
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
JavaScript更改原始对象valueOf的方法
2015/03/19 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
2017/03/09 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
基于JavaScript实现类名的添加与移除
2017/04/23 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
Vue学习之常用指令实例详解
2020/01/06 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
使用python Fabric动态修改远程机器hosts的方法
2018/10/26 Python
python 将对象设置为可迭代的两种实现方法
2019/01/21 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
python collections模块的使用
2020/10/16 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
数据库什么时候应该被重组
2012/11/02 面试题
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
软件售后服务方案
2014/05/29 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
2015年学生会部门工作总结
2015/04/21 职场文书
小学教育见习总结
2015/06/23 职场文书
Python如何加载模型并查看网络
2022/07/15 Python