PHP设计模式单例模式的继承实现
2023-09-11 14:18:38 时间
最近在做O2O平台的接入,因为发现之前公司的代码里已经有了某家开放平台的接入代码,如果我再往原先的控制器上加入逻辑代码,整个控制器的耦合度会非常高。加上每个平台有自己的签名验证算法,把加解密的方法写到平台的接入控制器里固然好,但是还是有耦合度问题。因此我的做法是先实现目前手上需要的功能,稍后会用面向对象的方法写一个抽象类,然后用对应平台的子类实现相应平台所需要的业务逻辑代码。
在写的过程中,发现现在框架中使用的YiiMongoDbSuite为模型类实现的一个单例模式很有意思,遂决定使用同样的写法实现我所需要的平台接入类。在这里我将这种写法略微总结一下。为了方便,例子中的变量名都使用YiiMongoDbSuite拓展中的变量名了。
1.父类(抽象类)中定义一个私有的静态变量$_model
,类型为数组,用来保存子类实例化后的结果。
2.父类实现一个静态的公共函数model()
,用于生成子类的实例化并保存在$_model
,传参为类名__CLASS__
。
3.子类中同样实现静态公共函数model()
,直接返回继承的父类的model()
方法结果。
具体还是看实现的代码。
父类(抽象类):
可以注意到,使用Child::model()
生成的实例ID相同,而直接通过new Child()
生成的实例ID为2。
当然,也可以把父类的__constract()
方法改为私有方法,这样new
关键字就失效了,只能通过Child::model()
这样的方式实例化子类。
相关文章
- PHP的内存回收(GC)
- 使用PHP + Apache访问有错误的php脚本时不报错
- php yii2 使用命令行模式开启脚本 报错 :Error while sending QUERY packet. PID=xxx
- php 过滤emoji表情
- PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、serialize、csv、php等数据
- 使用PHP生成通用唯一识别码(UUID)
- PHP获取客户端IP返回运营商信息函数
- PHP 性能优化 - php.ini 配置
- 详解php的安装模式---CGI,FASTCGI,php-fpm,mod_php,mod_cgi,mod_fcgid
- PHP设计模式系列 - 观察者模式处理订单(异步操作附加功能)
- php 36进制与10进制转换
- php 图片上传 二进制数据模式
- PHP mysqli_connect() 函数
- php:在linux上用sudo提升权限(centos 8 / PHP 7.4.2)
- windows下配置nginx+php环境
- [php-src] 窥探Php内核中的变量
- [转]php的public、protected、private三种访问控制模式的区别
- atitit.木马病毒webshell的原理and设计 java c# .net php.
- PHP MySQL 插入多条数据
- PHP 字符串变量
- PHP面试题:你所知道的php数组相关的函数?
- PHP面试题:对于大流量的网站,您采用什么样的方法来解决访问量问题?
- PHP:overtrue/pinyin 中文转拼音工具
- php 开发技巧
- php实现工厂模式
- https://www.threatminer.org/domain.php?q=blackschickens.xyz ——域名的信誉查询站点 还可以查IP
- php简单工厂模式
- PHP多进程编之pcntl_fork的实例详解
- 零基础应该选择学习 java、php、前端 还是 python?