gpt4 book ai didi

PHP设计模式之观察者模式定义与用法示例

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 29 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章PHP设计模式之观察者模式定义与用法示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了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设计模式之观察者模式定义与用法示例的文章就讲到这里了,如果你想了解更多关于PHP设计模式之观察者模式定义与用法示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com