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 相关文章推荐
某大型网络公司应聘时的笔试题目附答案
Mar 27 PHP
php strtotime 函数UNIX时间戳
Jan 14 PHP
PHP CKEditor 上传图片实现代码
Nov 06 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
Dec 19 PHP
php处理restful请求的路由类分享
Feb 27 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
Aug 21 PHP
写一段简单的PHP建立文件夹代码
Jan 06 PHP
百度地图API使用方法详解
Aug 25 PHP
PHP实现生成带背景的图形验证码功能
Oct 03 PHP
PHP运用foreach神奇的转换数组(实例讲解)
Feb 01 PHP
php实现微信企业转账功能
Oct 02 PHP
Swoole4.4协程抢占式调度器详解
May 23 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
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
利用curl抓取远程页面内容的示例代码
2013/07/23 PHP
50个PHP程序性能优化的方法
2014/06/02 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
2015/11/18 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
2020/05/29 PHP
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
Javascript设计模式之观察者模式(推荐)
2016/03/29 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
JavaScript函数柯里化原理与用法分析
2017/03/31 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
python字符串对其居中显示的方法
2015/07/11 Python
Python向日志输出中添加上下文信息
2017/05/24 Python
python基础while循环及if判断的实例讲解
2017/08/25 Python
matplotlib绘制动画代码示例
2018/01/02 Python
python中abs&amp;map&amp;reduce简介
2018/02/20 Python
python3实现随机数
2018/06/25 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
Python3实现汉语转换为汉语拼音
2019/07/08 Python
python如何判断IP地址合法性
2020/04/05 Python
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
党员组织关系介绍信
2014/02/13 职场文书
小小的船教学反思
2014/02/21 职场文书
业务员自荐信范文
2014/04/20 职场文书
2016大学迎新欢迎词
2015/09/29 职场文书
教你部署vue项目到docker
2022/04/05 Vue.js
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang