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 中的类
Oct 09 PHP
php discuz 主题表和回帖表的设计
Mar 13 PHP
PHP关联数组的10个操作技巧
Jan 21 PHP
深入Apache与Nginx的优缺点比较详解
Jun 17 PHP
php 强制下载文件实现代码
Oct 28 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
Jun 22 PHP
启用Csrf后POST数据时出现的400错误
Jul 05 PHP
php实现购物车功能(上)
Jul 23 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
php使用file函数、fseek函数读取大文件效率对比分析
Nov 04 PHP
laravel异步监控定时调度器实例详解
Jun 21 PHP
Laravel框架实现多个视图共享相同数据的方法详解
Jul 09 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
ThinkPHP3.1新特性之G方法的使用
2014/06/19 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
PHP关联数组实现根据元素值删除元素的方法
2015/06/26 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
利用php生成验证码
2017/02/23 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
2017/11/25 PHP
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
js操作checkbox遇到的问题解决
2013/06/29 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
jQuery中.attr()和.data()的区别分析
2017/09/03 jQuery
vue-cli脚手架引入图片的几种方法总结
2018/03/13 Javascript
js打开word文档预览操作示例【不是下载】
2019/05/23 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
Python中有趣在__call__函数
2015/06/21 Python
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
python无限生成不重复(字母,数字,字符)组合的方法
2018/12/04 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
c语言常见笔试题总结
2016/09/05 面试题
幼师自荐信范文
2013/10/06 职场文书
教师评优事迹材料
2014/01/10 职场文书
餐饮管理自我介绍信
2014/01/15 职场文书
党员学习群众路线教育实践活动对照检查材料
2014/09/23 职场文书
工地食品安全责任书
2015/05/09 职场文书
餐厅服务员管理制度
2015/08/05 职场文书
SQL Server——索引+基于单表的数据插入与简单查询【1】
2021/04/05 SQL Server
SQL IDENTITY_INSERT作用案例详解
2021/08/23 MySQL
python周期任务调度工具Schedule使用详解
2021/11/23 Python