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 相关文章推荐
一个简单计数器的源代码
Oct 09 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 PHP
PHP session_start()问题解疑(详细介绍)
Jul 05 PHP
解析将多维数组转换为支持curl提交的一维数组格式
Jul 08 PHP
php数组转换js数组操作及json_encode的用法详解
Oct 26 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
thinkphp循环结构用法实例
Nov 24 PHP
thinkPHP的表达式查询用法详解
Sep 14 PHP
php版微信数据统计接口用法示例
Oct 12 PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 PHP
解决laravel资源加载路径设置的问题
Oct 14 PHP
通过PHP实现用户注册后邮箱验证激活
Nov 10 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 Class 文章
2007/04/04 PHP
PHP四舍五入精确小数位及取整
2014/01/14 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
2013/04/25 Javascript
jQuery随便控制任意div隐藏的方法
2013/06/28 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
Python实现单词拼写检查
2015/04/25 Python
Python中str is not callable问题详解及解决办法
2017/02/10 Python
python unittest实现api自动化测试
2018/04/04 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
HTML5新控件之日期和时间选择输入的实现代码
2018/09/13 HTML / CSS
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
网游商务专员求职信
2013/10/15 职场文书
房地产开发计划书
2014/01/10 职场文书
入党积极分子介绍信
2014/01/17 职场文书
高中生操行评语
2014/04/25 职场文书
社区健康教育工作方案
2014/06/03 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书