为了账号安全,请及时绑定邮箱和手机立即绑定

(PHP)单例模式 怎么蹦出好多问题, 烦请大家帮忙指点一二

(PHP)单例模式 怎么蹦出好多问题, 烦请大家帮忙指点一二

慕码人2483693 2018-08-04 14:23:19
最近无意中看到一些对·单例模式·介绍的资料,有以下几个疑问:很多资料说单例模式无法继承, 我自己觉得不对, 单例模式完全可以将private设置为protected, 然后将self设置为static来实现继承功能呀, 不知道说无法继承的是哪个角度思考的, 所以有疑问?假设我的项目中有很多功能, 我的理解是 "用户每操作一下, 都会产生一个进程, 或者是一个进程中制作一次请求--相应操作, 然后当前操作在服务器运行完成并返回响应, 则进程结束, 这样的话, 假设你有个单例类是Log类, 用来记录日志, 那么本次进程结束后, 进程中的单例自然也就被销毁了, 另外一次操作的话, 这次操作会再次生成新的Log实例"所以单例应该是按一个个的进程为单位来讨论的, 但是很多资料说 "如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。" 这怎么理解? 多长时间算是长?毕竟我的项目根据功能点的不同, 可能有些功能点复杂, 有些简单, 我的Log实例要在每个功能中做日志记录, 难道还得考虑功能运行过长的话.... 我的日志会丢失一部分?还有资料说:"滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出"数据库连接池一般不就是个类似数组的容器么? 我第一次建立好数据库连接之后, 将连接对象放入连接池中, 如果进程中再次需要连接数据库的话, 直接从连接池中取出之前创建好的连接对象不就行了(而且我看比如TP3.2就是这么做的)所谓 "连接池溢出" 是什么意思, 难道是说本次进程中有 n 个 不同的数据库连接, 导致连接池中存放数据对象过大导致的内存溢出?不应该吧, 如果连接池是数组, 能放不少数据的啊, 而什么业务能在一个进程中操作这么多不同的数据库连接, 所以还是没能理解TP3.2框架使用单例也是非完全套用 三私一公 来实现的, 比如ThinkDriverDb 只做到静态化所有方法即可, 你即使new出来也没用, 这样是不是也没什么槽点?
查看完整描述

2 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

https://img1.sycdn.imooc.com//5b685d1e00013c9208000343.jpg

  1. 我是觉得可以继承的,使用static关键字

字太多,看得有点晕,你整理一下吧


查看完整回答
反对 回复 2018-08-06
  • 2 回答
  • 0 关注
  • 1078 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信