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 01 PHP
php面向对象全攻略 (十六) 对象的串行化
Sep 30 PHP
PHP技术开发技巧分享
Mar 23 PHP
php站内搜索并高亮显示关键字的实现代码
Dec 29 PHP
php中获取主机名、协议及IP地址的方法
Nov 18 PHP
PHP自毁程序(慎用)
Jul 09 PHP
最新制作ThinkPHP3.2.3完全开发手册
Nov 23 PHP
yii分页组件用法实例分析
Dec 28 PHP
PHP 微信扫码支付源代码(推荐)
Nov 03 PHP
PHP chunk_split()函数讲解
Feb 12 PHP
YII框架页面缓存操作示例
Apr 29 PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 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读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
List the Codec Files on a Computer
2007/06/11 Javascript
js操作textarea方法集合封装(兼容IE,firefox)
2011/02/22 Javascript
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
js相册效果代码(点击创建即可)
2013/04/16 Javascript
解读JavaScript中 For, While与递归的用法
2013/05/07 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
2014/01/14 Javascript
原生js编写autoComplete插件
2016/04/13 Javascript
简述jQuery Easyui一些用法
2017/08/01 jQuery
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
Python深入学习之上下文管理器
2014/08/31 Python
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
Python selenium如何设置等待时间
2016/09/15 Python
python与sqlite3实现解密chrome cookie实例代码
2018/01/20 Python
python实现简单登陆流程的方法
2018/04/22 Python
python操作redis方法总结
2018/06/06 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
植物选择:Botanic Choice
2017/02/15 全球购物
品恩科技软件测试面试题
2014/10/26 面试题
优秀英语专业毕业生求职信
2013/11/23 职场文书
物理系毕业生自荐书
2014/06/13 职场文书
签字仪式主持词
2015/07/03 职场文书
MySQL派生表联表查询实战过程
2022/03/20 MySQL
详解Python+OpenCV绘制灰度直方图
2022/03/22 Python