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 相关文章推荐
oracle资料库函式库
Oct 09 PHP
php 提速工具eAccelerator 配置参数详解
May 16 PHP
php urlencode()与urldecode()函数字符编码原理详解
Dec 06 PHP
PHP数据库链接类(PDO+Access)实例分享
Dec 05 PHP
php解析json数据实例
Aug 19 PHP
php魔术变量用法实例详解
Nov 13 PHP
php实现session自定义会话处理器的方法
Jan 27 PHP
php 在线导入mysql大数据程序
Jun 11 PHP
php json相关函数用法示例
Mar 28 PHP
PHP笛卡尔积实现算法示例
Jul 30 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
Apr 05 PHP
解决laravel查询构造器中的别名问题
Oct 17 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中的类-什么叫类
2006/11/20 PHP
提高php运行速度的一些小技巧分享
2012/07/03 PHP
有关于PHP中常见数据类型的汇总分享
2014/01/06 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
使用PHPExcel导出Excel表
2018/09/08 PHP
laravel实现前后台路由分离的方法
2019/10/13 PHP
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
微信网页登录逻辑与实现方法
2019/04/29 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
python合并文本文件示例
2014/02/07 Python
Django1.3添加app提示模块不存在的解决方法
2014/08/26 Python
Python之PyUnit单元测试实例
2014/10/11 Python
Python遍历某目录下的所有文件夹与文件路径
2018/03/15 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
python实现大文本文件分割
2019/07/22 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
python中的yield from语法快速学习
2020/11/06 Python
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
俄罗斯儿童和青少年服装、鞋子及配件的在线商店:Orby
2020/02/20 全球购物
城市规划毕业生求职信
2013/10/10 职场文书
会计学生自我鉴定
2014/02/06 职场文书
golang语言指针操作
2022/04/14 Golang