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初学者头痛的十四个问题
Jul 12 PHP
php 引用(&amp;)详解
Nov 20 PHP
PHP源码分析之变量的存储过程分解
Jul 03 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
php实现的简单美国商品税计算函数
Jul 13 PHP
PHP和C#可共用的可逆加密算法详解
Oct 26 PHP
ZF框架实现发送邮件的方法
Dec 03 PHP
php基于CodeIgniter实现图片上传、剪切功能
May 14 PHP
php中关于长度计算容易混淆的问题分析
May 27 PHP
PHP屏蔽关键字实现方法
Nov 17 PHP
浅谈PHP实现大流量下抢购方案
Dec 15 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
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 COOKIE设置为浏览器进程
2009/06/21 PHP
PHP 设置MySQL连接字符集的方法
2011/01/02 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
php实现小程序支付完整版
2018/10/09 PHP
PHP fclose函数用法总结
2019/02/15 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
javascript全局变量封装模块实现代码
2012/11/28 Javascript
node.js中的socket.io的广播消息
2014/12/15 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
2018/12/05 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
使用Python编写简单的画图板程序的示例教程
2015/12/08 Python
利用Python开发实现简单的记事本
2016/11/15 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
python实现三次样条插值
2018/12/17 Python
python实现读取excel文件中所有sheet操作示例
2019/08/09 Python
python中tab键是什么意思
2020/06/18 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
2016/08/25 HTML / CSS
鱼油专家:Omegavia
2016/10/10 全球购物
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
给校长的一封检讨书
2014/09/20 职场文书
中标通知书范本
2015/04/17 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
python实现MD5进行文件去重的示例代码
2021/07/09 Python
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL