欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP觀察者模式原理與簡(jiǎn)單實(shí)現(xiàn)方法示例

 更新時(shí)間:2017年08月25日 16:00:44   作者:LoveJulin  
這篇文章主要介紹了PHP觀察者模式原理與簡(jiǎn)單實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了php觀察者模式的概念、原理、實(shí)現(xiàn)方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了PHP觀察者模式原理與簡(jiǎn)單實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

當(dāng)一個(gè)對(duì)象狀態(tài)發(fā)生改變后,會(huì)影響到其他幾個(gè)對(duì)象的改變,這時(shí)候可以用觀察者模式。像wordpress這樣的應(yīng)用程序中,它容外部開(kāi)發(fā)組開(kāi)發(fā)插件,比如用戶(hù)授權(quán)的博客統(tǒng)計(jì)插件、積分插件,這時(shí)候可以應(yīng)用觀察者模式,先注冊(cè)這些插件,當(dāng)用戶(hù)發(fā)布一篇博文后,就回自動(dòng)通知相應(yīng)的插件更新。

觀察者模式符合接口隔離原則,實(shí)現(xiàn)了對(duì)象之間的松散耦合。

觀察者模式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);
}

下面具體實(shí)現(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)容感興趣的讀者可查看本站專(zhuān)題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《PHP基本語(yǔ)法入門(mén)教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • php生成RSS訂閱的方法

    php生成RSS訂閱的方法

    這篇文章主要介紹了php生成RSS訂閱的方法,較為詳細(xì)的分析了一個(gè)RSS訂閱類(lèi)及其具體使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 支持中文字母數(shù)字、自定義字體php驗(yàn)證碼代碼

    支持中文字母數(shù)字、自定義字體php驗(yàn)證碼代碼

    支持中文字母數(shù)字、自定義字體php驗(yàn)證碼代碼,需要的朋友可以參考下
    2012-02-02
  • PHP的加密方式及原理

    PHP的加密方式及原理

    有興趣研究了一下PHP的加密方式及原理,說(shuō)白了算不上加密,只是用了URL編碼和BASE64編碼的轉(zhuǎn)換
    2012-06-06
  • php使用swoole實(shí)現(xiàn)TCP服務(wù)

    php使用swoole實(shí)現(xiàn)TCP服務(wù)

    這篇文章主要為大家詳細(xì)介紹了php如何使用swoole實(shí)現(xiàn)TCP服務(wù),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2024-04-04
  • PHP中array_slice函數(shù)用法實(shí)例詳解

    PHP中array_slice函數(shù)用法實(shí)例詳解

    這篇文章主要介紹了PHP中array_slice函數(shù)用法,以實(shí)例形式詳細(xì)分析了array_slice函數(shù)的具體含義及使用技巧,并以分頁(yè)方法為例給出了具體的應(yīng)用實(shí)例,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • PHP實(shí)現(xiàn)會(huì)員賬號(hào)單唯一登錄的方法分析

    PHP實(shí)現(xiàn)會(huì)員賬號(hào)單唯一登錄的方法分析

    這篇文章主要介紹了PHP實(shí)現(xiàn)會(huì)員賬號(hào)單唯一登錄的方法,結(jié)合實(shí)例形式分析了php基于session與文件讀寫(xiě)的單一用戶(hù)登陸限制實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-03-03
  • php更新mysql后獲取影響的行數(shù)發(fā)生異常解決方法

    php更新mysql后獲取影響的行數(shù)發(fā)生異常解決方法

    mysql_affected_rows函數(shù)當(dāng)UPDATE前后的數(shù)據(jù)一樣時(shí)會(huì)返回異常值,接下來(lái)為大家介紹個(gè)簡(jiǎn)單的解決方法感興趣的朋友可以參考下哈
    2013-03-03
  • PHP使用SOAP擴(kuò)展實(shí)現(xiàn)WebService的方法

    PHP使用SOAP擴(kuò)展實(shí)現(xiàn)WebService的方法

    這篇文章主要介紹了PHP使用SOAP擴(kuò)展實(shí)現(xiàn)WebService的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了SOAP擴(kuò)展的原理及實(shí)現(xiàn)WebService的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • zend api擴(kuò)展的php對(duì)象的autoload工具

    zend api擴(kuò)展的php對(duì)象的autoload工具

    bloader提供一個(gè)常用的autoload函數(shù)ld,以及兩個(gè)輔助函數(shù),ld_new(實(shí)例化)和ld_unset(銷(xiāo)毀對(duì)象).
    2011-04-04
  • 解析isset與is_null的區(qū)別

    解析isset與is_null的區(qū)別

    isset是語(yǔ)句, 和echo, print一樣, 是PHP本身的一種語(yǔ)言結(jié)構(gòu). 而is_null是函數(shù), 和我們一般的函數(shù)一樣, 可以做為可變函數(shù)調(diào)用
    2013-08-08

最新評(píng)論