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
php 表单数据的获取代码
Mar 10 PHP
收藏的PHP常用函数 推荐收藏保存
Feb 21 PHP
解析zend studio中直接导入svn中的项目的方法步骤
Jun 21 PHP
关于PHPDocument 代码注释规范的总结
Jun 25 PHP
PHP中数组定义的几种方法
Sep 01 PHP
php循环table实现一行两列显示的方法
Jun 04 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
May 22 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
PHP里的$_GET数组介绍
Mar 22 PHP
微信推送功能实现方式图文详解
Jul 12 PHP
Swoole扩展的6种模式深入详解
Mar 04 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编写登录验证码功能 附调用方法
2016/05/19 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
总结PHP中DateTime的常用方法
2016/08/11 PHP
Laravel学习教程之model validation的使用示例
2017/10/23 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
javascript &amp;&amp;和||运算法的另类使用技巧
2009/11/28 Javascript
javaScript同意等待代码实现心得
2011/01/01 Javascript
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
JQuery 控制内容长度超出规定长度显示省略号
2014/05/23 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
Python中的面向对象编程详解(下)
2015/04/13 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
Python实现mysql数据库更新表数据接口的功能
2017/11/19 Python
python实战教程之自动扫雷
2018/07/13 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
如何查看Django ORM执行的SQL语句的实现
2020/04/20 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
包装类的功能、种类、常用方法
2012/01/27 面试题
自我鉴定书面格式
2014/01/13 职场文书
中级会计职业生涯规划范文
2014/01/16 职场文书
少儿节目主持串词
2014/04/02 职场文书
2015年小学数学教师个人工作总结
2015/05/25 职场文书
小学班主任研修日志
2015/11/13 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
Django模型层实现多表关系创建和多表操作
2021/07/21 Python
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android