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下防止单引号,双引号在接受页面转义的设置方法
Sep 25 PHP
linux iconv方法的使用
Oct 01 PHP
PHP调用Linux的命令行执行文件压缩命令
Jan 27 PHP
解析PHP 5.5 新特性
Jul 02 PHP
php Session存储到Redis的方法
Nov 04 PHP
推荐5款跨平台的PHP编辑器
Dec 25 PHP
支付宝接口开发集成支付环境小结
Mar 17 PHP
PHP获取Exif缩略图的方法
Jul 13 PHP
PHP正则表达式之捕获组与非捕获组
Nov 06 PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 PHP
php 7新特性之类型申明详解
Jun 06 PHP
apache集成php7.3.5的详细步骤
Jun 20 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 gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
php获得url参数中具有&amp;的值的方法
2014/03/05 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
2014/11/06 PHP
php+jQuery递归调用POST循环请求示例
2016/10/14 PHP
ArrayList类(增强版)
2007/04/04 Javascript
最佳JS代码编写的14条技巧
2011/01/09 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
JQuery validate插件验证用户注册信息
2016/05/11 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
javascriptvoid(0)含义以及与&quot;#&quot;的区别讲解
2019/01/19 Javascript
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
vue+axios全局添加请求头和参数操作
2020/07/24 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
Python创建日历实例
2014/08/21 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
Python 处理文件的几种方式
2019/08/23 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
应届大专生自荐书
2014/06/16 职场文书
党员教师四风问题整改措施思想汇报
2014/10/08 职场文书
2014年老干部工作总结
2014/11/21 职场文书
python读取并查看npz/npy文件数据以及数据显示方法
2022/04/14 Python