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 相关文章推荐
web方式ftp
Oct 09 PHP
phpMyAdmin2.11.6安装配置方法
Aug 24 PHP
JpGraph php柱状图使用介绍
Aug 23 PHP
探讨fckeditor在Php中的配置详解
Jun 08 PHP
使用PHP导出Word文档的原理和实例
Oct 21 PHP
php针对cookie操作的队列操作类实例
Dec 10 PHP
CodeIgniter删除和设置Cookie的方法
Apr 07 PHP
基于PHP如何把汉字转化为拼音
Dec 11 PHP
php单例模式的简单实现方法
Jun 10 PHP
Yii实现复选框批量操作实例代码
Mar 15 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
Apr 09 PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
Aug 03 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的图形函数中显示汉字
2006/10/09 PHP
PHP CURL模拟GET及POST函数代码
2010/04/25 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
chrome浏览器不支持onmouseleave事件的解决技巧
2013/05/31 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
vue实现菜单切换功能
2019/05/08 Javascript
Python实现列表删除重复元素的三种常用方法分析
2017/11/24 Python
Django自定义用户认证示例详解
2018/03/14 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
2018/04/27 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
2019/02/08 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
Python绘图实现显示中文
2019/12/04 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
html2canvas截图空白问题的解决
2020/03/24 HTML / CSS
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
小学生班会演讲稿
2014/01/09 职场文书
采购人员的个人自我评价
2014/01/16 职场文书
小学生安全保证书
2014/02/01 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
2015年植树节活动总结
2015/02/06 职场文书
优秀团员个人总结
2015/02/26 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书
MySQL 自定义变量的概念及特点
2021/05/13 MySQL
Python的这些库,你知道多少?
2021/06/09 Python
python之json文件转xml文件案例讲解
2021/08/07 Python
MySQL的存储过程和相关函数
2022/04/26 MySQL