亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

(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 關注
  • 1118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號