PHP觀察者模式原理與簡單實現(xiàn)方法示例
本文實例講述了PHP觀察者模式原理與簡單實現(xiàn)方法。分享給大家供大家參考,具體如下:
當(dāng)一個對象狀態(tài)發(fā)生改變后,會影響到其他幾個對象的改變,這時候可以用觀察者模式。像wordpress這樣的應(yīng)用程序中,它容外部開發(fā)組開發(fā)插件,比如用戶授權(quán)的博客統(tǒng)計插件、積分插件,這時候可以應(yīng)用觀察者模式,先注冊這些插件,當(dāng)用戶發(fā)布一篇博文后,就回自動通知相應(yīng)的插件更新。
觀察者模式符合接口隔離原則,實現(xiàn)了對象之間的松散耦合。
觀察者模式UML圖:
在php SPL中已經(jīng)提供SplSubject和SqlOberver接口
interface SplSubject { function attach(SplObserver $observer); function detach(SplObserver $observer); function notify(); } interface SqlObserver { function update(SplSubject $subject); }
下面具體實現(xiàn)上面例子
class Subject implements SplSubject { private $observers; public function attach(SplObserver $observer) { if (!in_array($observer, $this->observers)) { $this->observers[] = $observer; } } public function detach(SplObserver $observer) { if (false != ($index = array_search($observer, $this->observers))) { unset($this->observers[$index]); } } public function post() { //post相關(guān)code $this->notify(); } private function notify() { foreach ($this->observers as $observer) { $observer->update($this); } } public function setCount($count) { echo "數(shù)據(jù)量加" . $count; } public function setIntegral($integral) { echo "積分量加" . $integral; } } class Observer1 implements SplObserver { public function update($subject) { $subject-> setCount(1); } } class Observer2 implements SplObserver { public function update($subject) { $subject-> setIntegral(10); } } class Client { public function test() { $subject = new Subject(); $subject->attach(new Observer1()); $subject->attach(new Observer2()); $subject->post();//輸出:數(shù)據(jù)量加1 積分量加10 } }
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP基本語法入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
- PHP設(shè)計模式之觀察者模式(Observer)詳細(xì)介紹和代碼實例
- php設(shè)計模式 Observer(觀察者模式)
- php觀察者模式應(yīng)用場景實例詳解
- php設(shè)計模式之觀察者模式的應(yīng)用詳解
- 學(xué)習(xí)php設(shè)計模式 php實現(xiàn)觀察者模式(Observer)
- PHP設(shè)計模式之觀察者模式實例
- php設(shè)計模式 Template (模板模式)
- php設(shè)計模式 DAO(數(shù)據(jù)訪問對象模式)
- php設(shè)計模式 Proxy (代理模式)
- php單態(tài)設(shè)計模式(單例模式)實例
- PHP觀察者模式示例【Laravel框架中有用到】
相關(guān)文章
php更新mysql后獲取影響的行數(shù)發(fā)生異常解決方法
mysql_affected_rows函數(shù)當(dāng)UPDATE前后的數(shù)據(jù)一樣時會返回異常值,接下來為大家介紹個簡單的解決方法感興趣的朋友可以參考下哈2013-03-03PHP使用SOAP擴展實現(xiàn)WebService的方法
這篇文章主要介紹了PHP使用SOAP擴展實現(xiàn)WebService的方法,結(jié)合實例形式較為詳細(xì)的分析了SOAP擴展的原理及實現(xiàn)WebService的相關(guān)技巧,需要的朋友可以參考下2016-04-04