php很多内置的类或扩展类比较粗糙,需要人为的封装一遍,于是有了两种封装方式,
1直接继承
2内部实例化
如redis类,
可以
<code>namespace lib class redis extends \Redis {} </code>
也可以
<code>namespace lib class redis { private $_redis = null; public function __construct() { $this->_redis = new \Redis() } } </code>
第一种方法的优点是方便,无须把所有的方法重写一遍,但是不太好统一捕捉异常,
第二种就是麻烦些,需要重写一遍所有的方法,(虽然可以用魔术方法),捕捉异常方便些。
大家用的哪种?为什么呢?
回复内容:
php很多内置的类或扩展类比较粗糙,需要人为的封装一遍,于是有了两种封装方式,
1直接继承
2内部实例化
如redis类,
可以
<code>namespace lib class redis extends \Redis {} </code>
也可以
<code>namespace lib class redis { private $_redis = null; public function __construct() { $this->_redis = new \Redis() } } </code>
第一种方法的优点是方便,无须把所有的方法重写一遍,但是不太好统一捕捉异常,
第二种就是麻烦些,需要重写一遍所有的方法,(虽然可以用魔术方法),捕捉异常方便些。
大家用的哪种?为什么呢?
继承
继承的特点有
- ✔实现成本低
- ✔调用者可以沿用原有的接口使用,学习成本低
- ✔原有的功能无需任何代码如常工作
-
✘无法隐藏或改变原有的功能
- 其实你可以这么做,就好像你确实可以用铁丝去捅插座眼一样
- 改变输入、改变输出、改变行为都属于改变功能,比如原来抛的异常现在不抛了,原来return false现在变异常了,原来输入的是青椒现在变牛肉了等等
✘正交性弱,没有做到屏蔽父类的依赖,需要更换父类的时候显得脆弱
常见的合适的应用有
- 增加日志记录等不影响原有逻辑的“旁路逻辑”
-
增加一些方法,比如原有的某一些方法a()b()c()总是连续一起调用,增加一个doABC()方法
- 仅限简单的少量的方法,如果要加复杂的功能或者大量的方法,还是建议用组合
增加一些静态/工厂方法,比如
new Redis(ip, port)
=>OurRedis::getInstance()
一句话说就是原有行为不变,is-a的场景用继承。
组合
组合的特点有
- ✘实现成本略高,创建对象的过程可能会变复杂
- ✘调用者需要理解新的接口
- ✘需要转发才能让原有的功能工作
- ✔很容易隐藏/屏蔽原有的部分功能
- ✔正交性强,可以通过更换内部的对象适配不同的情况而保持外部接口不变
常见的合适的应用有
- 一切涉及改变行为的需求
- 未来依赖会变的场景,比如redis会变成memcache,或者mysql会变mariadb之类
- 需要屏蔽细节的场景,比如Session Cache等需求确实用到redis,但对外肯定要屏蔽“这是个redis实现的session”。否则恐龙会出现在你背后把你脑袋咬掉
一句话就是某个功能依赖另一个功能,use-a或has-a的场景用组合
偏题,predis用起来还不错,可以一试
如果你看过任何一本设计模式的书,肯定都是推荐你使用第二种。
它们奉行的原则是:组合优于继承。
不过,还得看自己需求。如果系统的接口和你的类提供的一致,可以试试第一种。如果不一致,选择第二种。
如果你正在为系统设计 DB 中间层,需要适配不同的数据库,选择第二种。
楼主你干脆用Java吧,别用PHP了。用好一门语言就要掌握这门语言的特性和风格,按照这门语言的风格去行事。

在PHP中,可以使用session_status()或session_id()來檢查會話是否已啟動。 1)使用session_status()函數,如果返回PHP_SESSION_ACTIVE,則會話已啟動。 2)使用session_id()函數,如果返回非空字符串,則會話已啟動。這兩種方法都能有效地檢查會話狀態,選擇使用哪種方法取決於PHP版本和個人偏好。

sessionsarevitalinwebapplications,尤其是在commercePlatform之前。

在PHP中管理並發會話訪問可以通過以下方法:1.使用數據庫存儲會話數據,2.採用Redis或Memcached,3.實施會話鎖定策略。這些方法有助於確保數據一致性和提高並發性能。

PHPsessionshaveseverallimitations:1)Storageconstraintscanleadtoperformanceissues;2)Securityvulnerabilitieslikesessionfixationattacksexist;3)Scalabilityischallengingduetoserver-specificstorage;4)Sessionexpirationmanagementcanbeproblematic;5)Datapersis

負載均衡會影響會話管理,但可以通過會話複製、會話粘性和集中式會話存儲解決。 1.會話複製在服務器間複製會話數據。 2.會話粘性將用戶請求定向到同一服務器。 3.集中式會話存儲使用獨立服務器如Redis存儲會話數據,確保數據共享。

Sessionlockingisatechniqueusedtoensureauser'ssessionremainsexclusivetooneuseratatime.Itiscrucialforpreventingdatacorruptionandsecuritybreachesinmulti-userapplications.Sessionlockingisimplementedusingserver-sidelockingmechanisms,suchasReentrantLockinJ

PHP會話的替代方案包括Cookies、Token-basedAuthentication、Database-basedSessions和Redis/Memcached。 1.Cookies通過在客戶端存儲數據來管理會話,簡單但安全性低。 2.Token-basedAuthentication使用令牌驗證用戶,安全性高但需額外邏輯。 3.Database-basedSessions將數據存儲在數據庫中,擴展性好但可能影響性能。 4.Redis/Memcached使用分佈式緩存提高性能和擴展性,但需額外配

Sessionhijacking是指攻擊者通過獲取用戶的sessionID來冒充用戶。防範方法包括:1)使用HTTPS加密通信;2)驗證sessionID的來源;3)使用安全的sessionID生成算法;4)定期更新sessionID。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。