国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

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

2024-05-05 00:04:52
字體:
供稿:網(wǎng)友

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

<?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   * 執(zhí)行登陸   */  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();//實現(xiàn)發(fā)郵件觀察者$login->attach(new EmailObserver());//實現(xiàn)發(fā)驗證碼觀察者$login->attach(new PhoneObserver());//實現(xiàn)其他觀察者$login->attach(new AbcObserver());//開始登陸$login->handleLogin();?>

運行結(jié)果:

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

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


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

圖片精選

主站蜘蛛池模板: 罗江县| 云和县| 揭阳市| 太康县| 江油市| 隆子县| 普兰县| 榆中县| 龙州县| 安阳县| 泸定县| 邵阳市| 北流市| 清远市| 延寿县| 灌南县| 昭平县| 怀来县| 麻城市| 三门峡市| 鸡泽县| 泰州市| 苍山县| 金坛市| 桑日县| 张家口市| 邵武市| 若尔盖县| 黄冈市| 漳浦县| 萝北县| 洛扎县| 开封市| 邵阳市| 玉山县| 武邑县| 高淳县| 金华市| 玉门市| 宣汉县| 黎川县|