大话php设计模式视频,大话PHP设计模式

工厂模式

用工厂方法或者类来实例化对象,而不是直接new。

首先我们需要创建一个工厂类,比如Factory.php。如果不使用工厂模式的,我们需要一个对象的时候通常需要

new Inexistence\girlfriend();

然而我们一般不只在一个地方需要这个对象,这个时候一旦对象发生变更,或者对象的某些属性发生变化,我们就需要一个一个的来改,非常麻烦。这个时候我们引入工厂类,在Factory.php中

865a9279fd4a9bccad0104a0d2a1f3f5.png

然后每次调用时$GF1 = Imagination\Factory::getGirlfriend()就可以避免四处修改的问题。

在Laravel中这样的设计模式很常见。

385ef872d31adb108ab5269ac275b5a9.png

单例模式

即确保某个类的对象仅被创建一次。比如我们在database里面存了很多女生的联系方式,如果我们用pdo的话每次查找都会new一个对象,势必会造成资源的浪费。所以我们就在connect之前做个判断。

6cea25bcc2912b72be95988e3e393319.png

这里面比较关键的地方在于声明了一个私有变量和私有的构造方法,然后再在这个类里面new自己,就避免了在其他地方重复实例化的问题。这个时候我们已经没法直接new Database了,我们只能通过调用get Instance方法来建立连接。这里顺带讲一下PHP的链式操作的实现。在很多框架比如用完26个字母就不知道怎么办的thinkPHP和Laravel中对数据库的操作可以使用链式操作,这样可以使代码更为优雅。具体实现就是使用return this;,这样就可以用where($where)->order($order)->limit(1);来代替多行语句。

Laravel使用了三目运算符来代替if,显得更为优雅。

注册模式

解决全局共享和交换对象的问题。实际上就是把实例好的对象放进一个数组,在任何地方要用的时候就去出来。就好比有一课树,我们把new好的$GF1,$GF2。。。一个一个挂上去,要用的时候再取出来。

78079fa39ed1a6d9cd765e47c65af530.png

unset在PHP中是关键字,所以用_unset代替。这样的话我们就要在工厂类中用一下Register::set()方法,把new好的对象挂树上。为了调用方便,Register中还需要一个get()方法来取对象。

6def8ed4b3c0df5b87f3c293436a62fc.png

这样我们也就不用再去使用单例模式了,直接从注册器中取Register::get()。

Laravel中用了更优雅的方式。

97f137e03531e5f51e6efea7f5e18411.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美团点评基于MGR的CMDB高可用架构搭建之路【转】

王志朋 美团点评DBA 曾在京东金融担任DBA,目前就职于美团点评,主要负责金融业务线数据库及基础组件数据库的运维。 MySQL Group Replication(以下简称MGR),于5.7.17版本正式GA,由Oracle官方出品&#xff0c…

redmine更换主题

主题列表:http://www.redmine.org/projects/redmine/wiki/Theme_List 虽然有很多主题,但是很多主题都是要钱的,像这类(上图)没有下载地址的,都是要钱的。 含GitHub的下载地址的,是免费可下载的&…

redmine 邮箱配置(阿里云+windows)

说明 密码是第三方的授权码,不是邮箱密码 需要登录126网页版,在设置里开启 smtp 等第三方服务,设置授权码 阿里云Linux 默认屏蔽25号端口,所以需要开启ssl,和使用 465 端口 重启下 redmind sh /opt/redmine-3.4.6-…

linux查看当前用户终端,Linux----基本命令的使用(vi命令,查看文件内容,显示进程,切换用户等)...

1、vi是linux系统上经常使用的一个文本编辑器,其有三种模式:命令模式、编辑模式(插入模式)、末行模式。命令模式——>编辑模式:“i a o I A O”linux编辑模式——>命令模式:“ESC”shell命令模式——>末行模式&#xff1…

centos6.8 环境一键安装包 nginx配置thinkphp5

---恢复内容开始--- lnmp1.4 一键安装包 nginx配置thinkphp5 环境:Nginx1.12.1 PHP5.6 Coentos6.8 修改网站配置文件 server{listen 443 ssl http2;#listen [::]:443 ssl http2;server_name xxx.cn;index index.html index.htm index.php default.html default.ht…

Linux下BitNami Redmine的插件安装与更新

截至2017年3月27日,Redmine-3.3.2-2安装以下的15款插件全部成功并通过测试(下面显示为插件正确文件夹名): easy_wbs redmine_ckeditor 提供所见即所得编辑器 redmine_graphs 提供部分问题图表功能 progressive_projects_list 是…

Linux下redmine安装插件报错

报错如下: There was an error parsing Gemfile: compile error - syntax error, unexpected :, expecting $end gem tzinfo-data, platforms: [:mingw, :x64_mingw, :mswin, :jruby]^. Bundler cannot continue. 原因是: redmine不同版本对ruby版本有…

linux限制ping的时间,如何限制Linux命令程序运行的时间

Linux提供了大量的命令,每个命令都是唯一的,并且在特定的情况下使用。Linux的目标是帮助您尽可能地高效工作。Linux命令的一个属性是时间限制。您可以为任何您想要的命令设置时间限制。如果时间过期,命令停止执行。在本教程中,您将…

微软网络工具psping介绍

该工具功能主要包括:ICMP Ping、TCP Ping、延迟测试、带宽测试,而且它是微软出品的下载地址:https://download.sysinternals.com/files/PSTools.ziphttp://technet.microsoft.com/en-us/sysinternals/jj729731解压后把psping.exe丢到C:\Windo…

mac svn

https://formac.informer.com/tortoisesvn

linux无法下载ftp,linux 不能下载怎么办

linux 不能下载怎么办?关于Linux下vsftp匿名用户上传和下载的配置配置要注意三部分,请一一仔细对照:1、vsftpd.conf文件的配置(vi /etc/vsftpd/vsftpd.conf)#允许匿名用户登录FTPanonymous_enableYES#设置匿名用户的登…

Spring IOC实现原理

2019独角兽企业重金招聘Python工程师标准>>> 1、BeanDefinition 对依赖翻转模式中管理对象依赖关系的数据抽象 实现依赖翻转功能的核心数据结构依赖翻转功能都是围绕对BeanDefinition 处理完成的有了这些BeanDefinition 基础数据结构,容器才能发挥作用2、…

openlayers入门开发系列之图层控制

本篇的重点内容是利用openlayers实现地图图层控制功能,效果图如下: 部分核心代码如下:页面引用ztree插件图层管理器界面布局图层管理器初始化jsLayerSwitcher类定义详细的实现过程见:这里

windows版本的redis

redis官网是不提供windows版本的。 微软的github上有windows版本下载,不会是redis的最新版本,是基于redis稳定版本制作的。 redis官网关于文档版本的说明: Redis uses a standard practice for its versioning: major.minor.patchlevel. A…

一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate

一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) Predicate为jdk1.8新增接口,由…

使用nginx代理,怎么获取真实的IP

1.在nginx.conf配置中加入配置信息 proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-NginX-Proxy true; 2.然后…

catcti监控linux主机,CentOS7搭建Prometheus 监控Linux主机

简介prometheus可以拆分成多个节点进行指标收集。安装prometheuswget -c https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gztar zxvf prometheus-2.23.0.linux-amd64.tar.gz -C /opt/cd /opt/ln -s prometheus-2.23.…

linux 安装redis2.8.3,Linux及Windows安装Redis(详细)

标签:Linux及Windows安装Redis1.Windows安装教程1.1下载https://github.com/MSOpenTech/redis/releases进入github里下载redis Windows版压缩包将我们下载好的文件放进新建的一个Redis文件夹(我在C盘创建了一个redis的文件夹)1.2启动服务打开我们Windows版的dos命令…

Git 少用 Pull 多用 Fetch 和 Merge

转自:http://www.oschina.net/translate/git-fetch-and-merge --------------------------------------------------------------------------------- 本文有点长而且有点乱,但就像Mark Twain Blaise Pascal的笑话里说的那样:我没有时间让…

IDEA生成可运行jar包

方式1: maven打包 maven 包中添加如下配置 <build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><appendAssemblyId>false</appendAssemblyId><descriptorRefs><descriptorRef&…