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下正则来匹配dede模板标签的代码
Aug 21 PHP
PHP日期处理函数 整型日期格式
Jan 12 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
PHP Session 变量的使用方法详解与实例代码
Sep 11 PHP
PHP查询网站的PR值
Oct 30 PHP
php setcookie函数的参数说明及其用法
Apr 20 PHP
php检测文件编码的方法示例
Apr 25 PHP
php上传图片生成缩略图(GD库)
Jan 06 PHP
php 生成Tab键或逗号分隔的CSV
Sep 24 PHP
PHP 网站修改默认访问文件的nginx配置
May 27 PHP
PHP+AJAX 投票器功能
Nov 11 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
Dec 06 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的ob_start();控制您的浏览器cache!
2007/02/14 PHP
解析php中获取url与物理路径的总结
2013/06/21 PHP
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
详解php中的implements 使用
2017/06/13 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
JQuery 获得绝对,相对位置的坐标方法
2010/02/09 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
jQuery动态生成Bootstrap表格
2016/11/01 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
vue实现固定位置显示功能
2019/05/30 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
Python单元测试与测试用例简析
2019/11/09 Python
flask实现验证码并验证功能
2019/12/05 Python
python之随机数函数的实现示例
2020/12/30 Python
英国最大的在线运动补充剂商店:Discount Supplements
2017/06/03 全球购物
Linux的文件类型
2012/03/07 面试题
文明礼仪标语
2014/06/13 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
师德承诺书
2015/01/20 职场文书
导游词开场白
2015/01/31 职场文书
2016年十一促销广告语
2016/01/28 职场文书
python使用torch随机初始化参数
2022/03/22 Python
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python