PHP观察者模式示例【Laravel框架中有用到】


Posted in PHP onJune 15, 2018

本文实例讲述了PHP观察者模式。分享给大家供大家参考,具体如下:

<?php
//观察者模式
//抽象主题类
interface Subject
{
  public function attach(Observer $Observer);
  public function detach(Observer $observer);
  //通知所有注册过的观察者对象
  public function notifyObservers();
}
//具体主题角色
class ConcreteSubject implements Subject
{
  private $_observers;
  public function __construct()
  {
    $this->_observers = array();
  }
  //增加一个观察者对象
  public function attach(Observer $observer)
  {
    return array_push($this->_observers,$observer);
  }
  //删除一个已经注册过的观察者对象
  public function detach(Observer $observer)
  {
    $index = array_search($observer,$this->_observers);
    if($index === false || !array_key_exists($index, $this->_observers)) return false;
    unset($this->_observers[$index]);
    return true;
  }
  //通知所有注册过的观察者
  public function notifyObservers()
  {
    if(!is_array($this->_observers)) return false;
    foreach($this->_observers as $observer)
    {
      $observer->update();
    }
    return true;
  }
}
//抽象观察者角色
interface Observer
{
  //更新方法
  public function update();
}
//观察者实现
class ConcreteObserver implements Observer
{
  private $_name;
  public function __construct($name)
  {
    $this->_name = $name;
  }
  //更新方法
  public function update()
  {
    echo 'Observer'.$this->_name.' has notify';
  }
}
$Subject = new ConcreteSubject();
//添加第一个观察者
$observer1 = new ConcreteObserver('baixiaoshi');
$Subject->attach($observer1);
echo 'the first notify:';
$Subject->notifyObservers();
//添加第二个观察者
$observer2 = new ConcreteObserver('hurong');
echo '<br/>second notify:';
$Subject->attach($observer2);
/*echo $Subject->notifyObservers();
echo '<br/>';
$Subject->notifyObservers();*/
?>

运行结果:

the first notify:Observerbaixiaoshi has notify
second notify:

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php学习之变量的使用
May 29 PHP
基于empty函数的输出详解
Jun 17 PHP
PHP使用PHPMailer发送邮件的简单使用方法
Nov 12 PHP
Apache启动报错No space left on device: AH00023该怎么解决
Oct 16 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
May 13 PHP
smarty自定义函数用法示例
May 20 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
Jun 06 PHP
php加密之discuz内容经典加密方式实例详解
Feb 04 PHP
php str_getcsv把字符串解析为数组的实现方法
Apr 05 PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 PHP
PHP二维关联数组的遍历方式(实例讲解)
Oct 18 PHP
Yii2处理密码加密及验证的方法
May 12 PHP
PHP堆栈调试操作简单示例
Jun 15 #PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 #PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 #PHP
基于swoole实现多人聊天室
Jun 14 #PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 #PHP
php实现微信公众平台发红包功能
Jun 14 #PHP
ThinkPHP3.2框架自定义配置和加载用法示例
Jun 14 #PHP
You might like
最令PHP初学者头痛的十四个问题
2006/07/12 PHP
PHP4之真OO
2006/10/09 PHP
php检测用户是否用手机(Mobile)访问网站的类
2014/01/09 PHP
PHP中new static() 和 new self() 的区别介绍
2015/01/09 PHP
ThinkPHP文件缓存类代码分享
2015/04/22 PHP
走出JavaScript初学困境—js初学
2008/12/29 Javascript
js Math 对象的方法
2013/09/01 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
Javascript操作URL函数修改版
2013/11/07 Javascript
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
2015/08/18 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
2019/06/28 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
Django验证码的生成与使用示例
2017/05/20 Python
Python中一些深不见底的“坑”
2019/06/12 Python
python入门之井字棋小游戏
2020/03/05 Python
python3 xpath和requests应用详解
2020/03/06 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
董事长职责范文
2013/11/08 职场文书
银行竞聘演讲稿范文
2014/04/23 职场文书
个人向公司借款协议书
2014/10/09 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
React实现动效弹窗组件
2021/06/21 Javascript