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里的JS打印函数
Oct 09 PHP
数字转英文
Dec 06 PHP
php下把数组保存为文件格式的实例应用
Feb 08 PHP
关于PHP5 Session生命周期介绍
Mar 02 PHP
Joomla下利用configuration.php存储简单数据
May 19 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
Dec 19 PHP
php 代码优化之经典示例
Mar 24 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
Jun 28 PHP
解析Ubuntu下crontab命令的用法
Jun 24 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 PHP
php中的mongodb select常用操作代码示例
Sep 06 PHP
php遍历删除整个目录及文件的方法
Mar 13 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开发规范手册之PHP代码规范详解
2011/01/13 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
PHP使用pear自带的mail类库发邮件的方法
2015/07/08 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
2010/12/11 Javascript
最常用的12种设计模式小结
2011/08/09 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
jquery实现左右滑动菜单效果代码
2015/08/27 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
JS学习之表格的排序简单实例
2016/05/16 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
关于vue面试题汇总
2018/03/20 Javascript
python django 访问静态文件出现404或500错误
2017/01/20 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
Python 字典中的所有方法及用法
2020/06/10 Python
利用python 读写csv文件
2020/09/10 Python
CSS3感应鼠标的背景闪烁和图片缩放动画效果
2014/05/14 HTML / CSS
美国著名手表网站:Timepiece
2017/11/15 全球购物
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
工作态度怎么写
2015/06/25 职场文书
《静夜思》教学反思
2016/02/17 职场文书
Python进行区间取值案例讲解
2021/08/02 Python