亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP設計模式之觀察者模式定義與用法示例

2024-05-05 00:04:52
字體:
來源:轉載
供稿:網友

本文實例講述了PHP設計模式之觀察者模式定義與用法。分享給大家供大家參考,具體如下:

<?php/** * Interface Observable * define a observable interface * @author jichao.wang */interface Observable{  function attach(Observer $observer);  function detach(Observer $observer);  function notify();}/** * Class Login * @author jichao.wang */class Login implements Observable{  private $observers;  public $status;  public $ip;  const LOGIN_ACCESS = 1;  const LOGIN_WRONG_PASS = 2;  const LOGIN_USER_UNKNOWN = 3;  function __construct()  {    $this->observers = array();  }  /**   * @param Observer $observer   * @author jichao.wang   * attach a observer   */  function attach(Observer $observer)  {    $this->observers[] = $observer;  }  /**   * @param Observer $observer   * @author jichao.wang   * detach a observer   */  function detach(Observer $observer)  {    $newObservers = array();    foreach ($this->observers as $key => $obs) {      if ($obs !== $observer) {        $newObservers[] = $obs;      }    }    $this->observers = $newObservers;  }  /**   * @author jichao.wang   * handle observer notify   */  function notify()  {    foreach ($this->observers as $obs) {      $obs->update($this);    }  }  /**   * @author jichao.wang   * 執行登陸   */  function handleLogin()  {    $ip = rand(1,100);    switch (rand(1, 3)) {      case 1:        $this->setStatus(self::LOGIN_ACCESS, $ip);        $ret = true;        break;      case 2:        $this->setStatus(self::LOGIN_WRONG_PASS, $ip);        $ret = false;        break;      case 3:        $this->setStatus(self::LOGIN_USER_UNKNOWN, $ip);        $ret = false;        break;    }    /**     * handle event     */    $this->notify();    return $ret;  }  /**   * @param $status   * @author jichao.wang   * set login status   */  function setStatus($status,$ip)  {    $this->status = $status;    $this->ip = $ip;  }  /**   * @return mixed   * @author jichao.wang   * get login status   */  function getStatus()  {    return $this->status;  }}/** * Interface Observer * @author jichao.wang */interface Observer {  function update(Observable $observable);}/** * Class EmailObserver * @author jichao.wang */class EmailObserver implements Observer {  function update (Observable $observable) {    $status = $observable->getStatus();    if($status == Login::LOGIN_ACCESS){//      $this->sendMail('用戶ip:'.$observable->ip.'登陸成功!');      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸成功!'.'------------------';    }    if($status == Login::LOGIN_WRONG_PASS){//      $this->sendMail('用戶ip:'.$observable->ip.'登陸失敗,密碼錯誤!');      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸失敗,密碼錯誤!'.'------------------';    }    if($status == Login::LOGIN_USER_UNKNOWN){//      $this->sendMail('用戶ip:'.$observable->ip.'登陸失敗,無此用戶!');      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸失敗,無此用戶!'.'------------------';    }  }}/** * Class PhoneObserver * @author jichao.wang */class PhoneObserver implements Observer {  function update (Observable $observable) {    $status = $observable->getStatus();    if($status == Login::LOGIN_ACCESS){//      $this->sendMail('用戶ip:'.$observable->ip.'登陸成功!');      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸成功!'.'------------------';    }    if($status == Login::LOGIN_WRONG_PASS){//      $this->sendMail('用戶ip:'.$observable->ip.'登陸失敗,密碼錯誤!');      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸失敗,密碼錯誤!'.'------------------';    }    if($status == Login::LOGIN_USER_UNKNOWN){//      $this->sendMail('用戶ip:'.$observable->ip.'登陸失敗,無此用戶!');      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸失敗,無此用戶!'.'------------------';    }  }}class AbcObserver implements Observer {  function update (Observable $observable) {    $status = $observable->getStatus();    if($status == Login::LOGIN_ACCESS){//      $this->sendMail('用戶ip:'.$observable->ip.'登陸成功!');      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸成功!'.'------------------';    }    if($status == Login::LOGIN_WRONG_PASS){//      $this->sendMail('用戶ip:'.$observable->ip.'登陸失敗,密碼錯誤!');      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸失敗,密碼錯誤!'.'------------------';    }    if($status == Login::LOGIN_USER_UNKNOWN){//      $this->sendMail('用戶ip:'.$observable->ip.'登陸失敗,無此用戶!');      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸失敗,無此用戶!'.'------------------';    }  }}//實例化登陸信息$login = new Login();//實現發郵件觀察者$login->attach(new EmailObserver());//實現發驗證碼觀察者$login->attach(new PhoneObserver());//實現其他觀察者$login->attach(new AbcObserver());//開始登陸$login->handleLogin();?>

運行結果:

EmailObserver用戶ip:41登陸失敗,無此用戶!------------------PhoneObserver用戶ip:41登陸失敗,無此用戶!------------------AbcObserver用戶ip:41登陸失敗,無此用戶!------------------

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产91久久久久久| 日韩毛片中文字幕| 91精品国产综合久久香蕉922| 欧美性猛交xxxx乱大交蜜桃| 亚洲精品自拍视频| 正在播放欧美视频| 欧美—级高清免费播放| 亚洲肉体裸体xxxx137| 欧美日韩成人在线视频| 伊人久久久久久久久久| 亚洲一区第一页| 亚洲国产天堂久久综合| 国产精品日韩精品| 国产免费一区二区三区在线观看| 亚洲永久免费观看| 国产精品日韩在线观看| 欧美激情精品久久久久久免费印度| 久久综合伊人77777| 亚洲美女久久久| 欧美在线性爱视频| 中文字幕精品av| 亚洲free嫩bbb| 欧美性xxxxxxxxx| 中文字幕亚洲一区二区三区五十路| 精品视频久久久| 国产在线精品一区免费香蕉| 日本精品中文字幕| 国产精品啪视频| 国产精品69精品一区二区三区| 精品美女永久免费视频| 欧美国产第一页| 欧美黑人性视频| 中文字幕久久亚洲| 夜色77av精品影院| 成人国产亚洲精品a区天堂华泰| 国产精品久久久久久久久免费看| 亚洲人成人99网站| 欧美性xxxx极品hd欧美风情| 久久亚洲精品中文字幕冲田杏梨| 久久久中文字幕| 欧美亚洲国产精品| 久久久久久久久久亚洲| 欧美黄色片免费观看| 欧美在线视频观看| 亚洲欧美在线磁力| 国产欧美精品一区二区三区介绍| 日韩大片在线观看视频| 久久视频在线直播| 8090成年在线看片午夜| 国产亚洲精品久久久久久777| 成人精品一区二区三区电影免费| 国产一区二区三区在线| 91精品91久久久久久| 中文字幕精品影院| 欧美xxxx18性欧美| 欧美精品一区在线播放| 亚洲男人第一av网站| 国产va免费精品高清在线观看| 欧美精品videosex性欧美| 欧美影院久久久| 亚洲人成在线电影| 视频在线观看一区二区| 国产成+人+综合+亚洲欧洲| 91久久在线播放| xxx欧美精品| 久久精品99久久久久久久久| 国产精品第七十二页| 欧美高清视频在线播放| 久久精品在线视频| 国产精品久久久久久久天堂| 成人国产在线激情| 成人xxxx视频| 国产精品美女久久久久久免费| 欧美精品久久久久久久久| 日韩成人小视频| 欧美大片在线免费观看| 成人xxxxx| 日本免费在线精品| 国产精品精品国产| 国产精品亚洲自拍| 日韩电影免费观看中文字幕| 亚洲激情小视频| 久久久久久成人精品| 成人免费福利视频| 日韩精品在线观看网站| 国产精品爽黄69| 国产欧美在线看| 日韩av中文在线| 亚洲人成伊人成综合网久久久| 精品久久久国产| 91性高湖久久久久久久久_久久99| 国产日韩欧美在线视频观看| 91免费欧美精品| 最近中文字幕2019免费| yellow中文字幕久久| 国产亚洲精品91在线| 欧美插天视频在线播放| 欧美日韩亚洲视频一区| 国产日韩综合一区二区性色av| 亚洲欧美国产精品va在线观看| 欧美一区二区三区……| 青青久久av北条麻妃海外网| 欧美激情a∨在线视频播放| 国产午夜精品免费一区二区三区| 日韩一中文字幕| 97视频在线观看播放| 国产精品久久久久久久久久99| 国产精品爽爽ⅴa在线观看| 欧美精品久久久久久久久| 国产免费观看久久黄| 日韩综合中文字幕| 欧美激情a∨在线视频播放| 伊人男人综合视频网| 91精品在线一区| 欧美性理论片在线观看片免费| 国产精品久久久久久久久久ktv| 免费不卡欧美自拍视频| 国产成人精品免高潮费视频| 欧美乱大交做爰xxxⅹ性3| 亚洲护士老师的毛茸茸最新章节| 91网站在线免费观看| 欧美亚洲成人免费| 亚洲成人精品视频在线观看| 国产精品一区二区久久| 欧美高清无遮挡| 日韩av电影中文字幕| 最近2019好看的中文字幕免费| 国产精品高潮呻吟视频| 亚洲一区二区日本| 国产成人综合精品在线| 成人网中文字幕| 国内精品视频在线| 91sao在线观看国产| 国产精品青草久久久久福利99| 亚洲精品美女久久久| 久久精品精品电影网| 欧美日韩国产页| 97免费在线视频| 福利一区福利二区微拍刺激| 亚洲女成人图区| 91精品久久久久久| 亚洲精品色婷婷福利天堂| 国产精品国产亚洲伊人久久| 日韩一区二区av| 亚洲欧美国产视频| 欧美黑人狂野猛交老妇| 久久男人av资源网站| 超碰精品一区二区三区乱码| 亚洲成人黄色网址| 亚洲视频999| 亚洲性av网站| 成人激情视频小说免费下载| 91精品国产色综合久久不卡98| 情事1991在线| 日韩av在线网| 国产精品三级在线| 一本色道久久88综合日韩精品| 97视频免费在线观看| 欧美日韩精品中文字幕| 成人免费大片黄在线播放| 亚洲欧美日韩一区二区三区在线| 国产精品第8页| 欧美日韩在线观看视频小说| 亚洲精品久久久久久久久久久久久|