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 相关文章推荐
PHP4.04简明安装
Oct 09 PHP
使用 eAccelerator加速PHP代码的方法
Sep 30 PHP
彻底删除thinkphp3.1案例blog标签的方法
Dec 05 PHP
PHP实现采集抓取淘宝网单个商品信息
Jan 08 PHP
php使用cookie保存登录用户名的方法
Jan 26 PHP
摘自织梦CMS的HTTP文件下载类
Aug 08 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
May 21 PHP
Centos6.5和Centos7 php环境搭建方法
May 27 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 PHP
php两点地理坐标距离的计算方法
Dec 29 PHP
浅谈laravel框架sql中groupBy之后排序的问题
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
curl和libcurl的区别简介
2015/07/01 PHP
js中typeof的用法汇总
2013/12/12 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
jQuery实现图片轮播特效代码分享
2015/09/15 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
2017/02/11 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
angular.js实现购物车功能
2017/10/23 Javascript
CentOS7中源码编译安装NodeJS的完整步骤
2018/10/13 NodeJs
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
用Python创建声明性迷你语言的教程
2015/04/13 Python
python抓取百度首页的方法
2015/05/19 Python
python rsa 加密解密
2017/03/20 Python
Django 路由系统URLconf的使用
2018/10/11 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
opencv 获取rtsp流媒体视频的实现方法
2019/08/23 Python
django框架中间件原理与用法详解
2019/12/10 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
历史系毕业生自荐信
2013/10/28 职场文书
公益活动策划方案
2014/01/09 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
企业战略合作意向书
2015/05/08 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫
win10以太网连接不上怎么办?Win10连接以太网详细教程
2022/04/08 数码科技