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 相关文章推荐
使用sockets:从新闻组中获取文章(二)
Oct 09 PHP
不用数据库的多用户文件自由上传投票系统(2)
Oct 09 PHP
处理php自动反斜杠的函数代码
Jan 05 PHP
PHP 根据IP地址控制访问的代码
Apr 22 PHP
PHP 可阅读随机字符串代码
May 26 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
用php代码限制国内IP访问我们网站
Sep 26 PHP
WordPress中缩略图的使用以及相关技巧
Nov 24 PHP
深入理解PHP类的自动载入机制
Sep 16 PHP
php注册和登录界面的实现案例(推荐)
Oct 24 PHP
PHP静态成员变量
Feb 14 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
May 02 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学习之数组的定义和填充
2011/04/17 PHP
PHP获取MySql新增记录ID值的3种方法
2014/06/24 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
vue2中使用less简易教程
2018/03/27 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
2019/06/28 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
2020/08/12 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
[01:07]DOTA2次级职业联赛 - Fpb战队宣传片
2014/12/01 DOTA
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
聊聊Python中的pypy
2018/01/12 Python
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
深入了解Python在HDA中的应用
2019/09/05 Python
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
师生聚会感言
2014/01/26 职场文书
专题组织生活会发言材料
2014/10/17 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
任命书标准格式
2015/03/02 职场文书
高一语文教学反思
2016/02/16 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
Java 多态分析
2022/04/26 Java/Android