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脚本的10个技巧(3)
Oct 09 PHP
一段防盗连的PHP代码
Dec 06 PHP
PHP字符转义相关函数小结(php下的转义字符串)
Apr 12 PHP
用php获取本周,上周,本月,上月,本季度日期的代码
Aug 05 PHP
基于MySQL到MongoDB简易对照表的详解
Jun 03 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
May 10 PHP
图文介绍PHP添加Redis模块及连接
Jul 28 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
Jan 07 PHP
PHP连接MYSQL数据库实例代码
Jan 20 PHP
PHP计算近1年的所有月份
Mar 13 PHP
thinkphp关于简单的权限判定方法
Apr 03 PHP
PHP使用反向Ajax技术实现在线客服系统详解
Jul 01 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
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
8个实用的jQuery技巧
2014/03/04 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
Vue项目自动转换 px 为 rem的实现方法
2018/10/29 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
跟老齐学Python之模块的加载
2014/10/24 Python
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
python之PyMongo使用总结
2017/05/26 Python
简单了解django缓存方式及配置
2019/07/19 Python
什么是Python变量作用域
2020/06/03 Python
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
你对IPv6了解程度
2016/02/09 面试题
大二自我鉴定范文
2013/10/05 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
务虚会发言材料
2014/12/25 职场文书
营业员岗位职责
2015/02/11 职场文书
运动会新闻报道稿
2015/07/22 职场文书
如何使用PostgreSQL进行中文全文检索
2021/05/27 PostgreSQL
MySQL通过binlog恢复数据
2021/05/27 MySQL
HttpClient实现文件上传功能
2022/08/14 Java/Android