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

首頁(yè) > 語(yǔ)言 > PHP > 正文

PHP使用標(biāo)準(zhǔn)庫(kù)spl實(shí)現(xiàn)的觀察者模式示例

2024-05-05 00:04:52
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例講述了PHP使用標(biāo)準(zhǔn)庫(kù)spl實(shí)現(xiàn)的觀察者模式。分享給大家供大家參考,具體如下:

前面使用純php實(shí)現(xiàn)了一個(gè)觀察者模式(php觀察者模式), 現(xiàn)在使用php標(biāo)準(zhǔn)庫(kù)spl在次實(shí)現(xiàn)觀察者模式,好處是:隨意的生成您想使用的觀察者!

<?php/** * Created by PhpStorm. * User: evolution * Date: 14-12-27 * Time: 下午5:50 */class Login implements SplSubject {  private $storage;  public $status;  public $ip;  const LOGIN_ACCESS = 1;  const LOGIN_WRONG_PASS = 2;  const LOGIN_USER_UNKNOWN = 3;  function __construct(){    $this->storage = new SplObjectStorage();  }  function attach (SplObserver $observer) {    $this->storage->attach($observer);  }  function detach(SplObserver $observer){    $this->storage->detach($observer);  }  function notify(){    foreach ($this->storage 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;  }}/** * 只針對(duì)登陸的貫觀察者 * Class LoginObserver */abstract class LoginObserver implements SplObserver {  private $login;  function __construct(Login $login){    $this->login = $login;    $login->attach($this);  }  /**   * 對(duì)外統(tǒng)一的訪問(wèn)點(diǎn)   * @param SplSubject $subject   */  function update( SplSubject $subject ){    if($subject === $this->login){      $this->doUpdate($subject);    }  }  abstract function doUpdate( Login $login );}/** * Class EmailObserver */class EmailObserver extends LoginObserver{  //不同功能的觀察者實(shí)現(xiàn)不同的功能  function doUpdate( Login $login ){    $status = $login->getStatus();    if($status == Login::LOGIN_ACCESS){//      $this->sendMail('用戶ip:'.$observable->ip.'登陸成功!');      echo __CLASS__.'用戶ip:'.$login->ip.'登陸成功!'.'------------------';    }    if($status == Login::LOGIN_WRONG_PASS){//      $this->sendMail('用戶ip:'.$observable->ip.'登陸失敗,密碼錯(cuò)誤!');      echo __CLASS__.'用戶ip:'.$login->ip.'登陸失敗,密碼錯(cuò)誤!'.'------------------';    }    if($status == Login::LOGIN_USER_UNKNOWN){//      $this->sendMail('用戶ip:'.$observable->ip.'登陸失敗,無(wú)此用戶!');      echo __CLASS__.'用戶ip:'.$login->ip.'登陸失敗,無(wú)此用戶!'.'------------------';    }  }}//實(shí)例化登陸信息$login = new Login();//實(shí)現(xiàn)發(fā)郵件觀察者new EmailObserver($login);//開(kāi)始登陸$login->handleLogin();

運(yùn)行結(jié)果:

EmailObserver用戶ip:77登陸成功!------------------

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


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

圖片精選

主站蜘蛛池模板: 色达县| 原平市| 和静县| 汉沽区| 乌鲁木齐县| 柯坪县| 巴塘县| 高陵县| 佛坪县| 定襄县| 越西县| 宁陵县| 惠安县| 伊川县| 凉城县| 裕民县| 嘉禾县| 友谊县| 上思县| 张家口市| 南充市| 南和县| 安溪县| 淮阳县| 新宁县| 镇远县| 乌海市| 上犹县| 兴国县| 平潭县| 博乐市| 承德市| 临夏县| 呼伦贝尔市| 正镶白旗| 施秉县| 晋中市| 铜梁县| 石景山区| 香格里拉县| 长宁县|