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实现MySQL更新记录的代码
Jun 07 PHP
PHP下10件你也许并不了解的事情
Sep 11 PHP
PHP 裁剪图片成固定大小代码方法
Sep 09 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
PHP操作MongoDB时的整数问题及对策说明
May 02 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
Aug 21 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
May 12 PHP
ThinkPHP实现ajax仿官网搜索功能实例
Dec 02 PHP
php读取der格式证书乱码解决方法
Jun 22 PHP
PHP文件上传处理案例分析
Oct 15 PHP
PHP7内核CGI与FastCGI详解
Apr 14 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 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
codeigniter实现get分页的方法
2015/07/10 PHP
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
如何将网页表格内容导入excel
2014/02/18 Javascript
Javascript的&amp;&amp;和||的另类用法
2014/07/23 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
2015/12/07 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
[51:17]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第二场 10月30日
2020/10/31 DOTA
Python访问MySQL封装的常用类实例
2014/11/11 Python
Python标准库之Sys模块使用详解
2015/05/23 Python
Python Paramiko模块的安装与使用详解
2016/11/18 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
2018/10/09 Python
Python数据可视化:饼状图的实例讲解
2019/12/07 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
python怎么判断素数
2020/07/01 Python
python3实现简单飞机大战
2020/11/29 Python
python3判断IP地址的方法
2021/03/04 Python
高分子材料与工程专业推荐信
2013/12/01 职场文书
运动会广播稿150字
2014/02/19 职场文书
环境工程专业自荐信范文
2014/03/18 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
市场营销专业毕业生求职信
2014/07/21 职场文书
标准离婚协议书(2014版)
2014/10/05 职场文书
详解Redis在SpringBoot工程中的综合应用
2021/10/16 Redis