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安装攻略:常见问题解答(一)
Oct 09 PHP
理解PHP5中static和const关键字的区别
Mar 19 PHP
php session应用实例 登录验证
Mar 16 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
Aug 06 PHP
PHP常用的文件操作函数经典收藏
Apr 02 PHP
解析centos中Apache、php、mysql 默认安装路径
Jun 25 PHP
php中eval函数的危害与正确禁用方法
Jun 30 PHP
php实现的Captcha验证码类实例
Sep 22 PHP
2014最热门的24个php类库汇总
Dec 18 PHP
php5.4传引用时报错问题分析
Jan 22 PHP
PHP5.2中PDO的简单使用方法
Mar 25 PHP
简单概括PHP的字符串中单引号与双引号的区别
May 07 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 str_replace的替换漏洞
2008/03/15 PHP
php,ajax实现分页
2008/03/27 PHP
用PHP获取Google AJAX Search API 数据的代码
2010/03/12 PHP
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
javascript 禁止复制网页
2009/06/11 Javascript
JS动态添加option和删除option(附实例代码)
2013/04/01 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
巧用局部变量提升javascript性能
2014/02/24 Javascript
浅谈$('div a') 与$('div&gt;a')的区别
2016/07/18 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
深入浅析javascript函数中with
2018/10/28 Javascript
如何自定义微信小程序tabbar上边框的颜色
2019/07/09 Javascript
Antd的table组件表格的序号自增操作
2020/10/27 Javascript
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
Python操作串口的方法
2015/06/17 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
基于python的七种经典排序算法(推荐)
2016/12/08 Python
关于Python面向对象编程的知识点总结
2017/02/14 Python
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
python+django+rest框架配置创建方法
2019/08/31 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
材料加工硕士生求职信
2013/10/10 职场文书
军训口号
2014/06/13 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
MySql如何将查询的出来的字段进行转换
2022/06/14 MySQL