中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP設計模式-觀察者

發布時間:2020-06-28 17:37:24 來源:網絡 閱讀:396 作者:侯施群 欄目:web開發

PHP設計模式-觀察者

   

   一個對象狀態發生改變后,會影響到其他幾個對象的改變,這時候可以用觀察者模式。一個對象通過添加一個attach方法允許觀察者注冊自己,使本身變得可觀察。當被觀察的對象更改時,它會將消息發送到已注冊的觀察者。觀察者使用該信息執行的操作與被觀察的對象無關。觀察者模式是一種事件系統,意味著這一模式允許某些類通過觀察被觀察類的狀態變化,做出相應的動作。

   

  觀察者模式UML圖

PHP設計模式-觀察者

  php5中提供了觀察者observer與被觀察者subject接口

   interface SplSubject  

    {  

    function attach(SplObserver $observer);  

    function detach(SplObserver $observer);  

    function notify();  

    }  

   interface SqlObserver  

    {  

    function update(SplSubject $subject);  

    }

  例子如下

<?php
  class user implements SplSubject{
  public     $lognum;
  public     $hobby;
  protected  $observers;
  
  public function __construct($hobby){
      $this->lognum= rand(1,10);
      $this->hobby= $hobby;
      $this->observers=new SplObjectStorage();
  }
  public function login(){
    $this->notify();
  }
  
  public function attach(SPLObserver $observer){
    $this->observers->attach($observer);
  }
  
  public function detach(SPLObserver $observer){
      $this->observers->detach($observer);
  }
  
  public function notify(){
      $this->observers->rewind();
      while($this->observers->valid){
         $observer= $this->observers->current();
         $observer->update($this);
         $this->observers->next();
      }      
  }    
  }
   
  class secrity implements SPLObserver{
      
      public function update(SplSubject $subject){
          if($subject->lognum>=3){
              
          }else{
              
          }          
      }
  }
    
  class ad implements SPLObserver{
  
      public function update(SplSubject $subject){
          if($subject->hobby=="sports"){
  
          }else{
  
          }  
      }
  }
  
  //實施觀察
  $user= new user("sports");
  $user->attach(new secrity());
  $user->attach(new ad());
  $user->login();
  
  ?>


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

承德市| 祁东县| 高要市| 通榆县| 台南县| 阿图什市| 涞水县| 安塞县| 永泰县| 论坛| 禹城市| 民和| 三亚市| 山东省| 神池县| 河源市| 兴化市| 黄山市| 武功县| 台江县| 东兰县| 治县。| 剑阁县| 营山县| 增城市| 沂水县| 房产| 宁远县| 浦城县| 拜城县| 简阳市| 慈溪市| 巴青县| 静安区| 仲巴县| 永春县| 庄浪县| 西城区| 准格尔旗| 大方县| 古浪县|