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面试题附答案
Jan 07 PHP
php dirname(__FILE__) 获取当前文件的绝对路径
Jun 28 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
Sep 19 PHP
探讨php中header的用法详解
Jun 07 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
Mar 07 PHP
php实现统计目录文件大小的函数
Dec 25 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
Dec 25 PHP
Thinkphp5+uploadify实现的文件上传功能示例
May 26 PHP
PHP实现可精确验证身份证号码的工具类示例
May 31 PHP
laravel框架语言包拓展实现方法分析
Nov 22 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
Dec 03 PHP
php的instanceof和判断闭包Closure操作示例
Jan 26 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
PHP定时任务延缓执行的实现
2014/10/08 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
全屏js头像上传插件源码高清版
2016/03/29 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
Angular 应用技巧总结
2016/09/14 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
vuex进阶知识点巩固
2018/05/20 Javascript
浅析vue-router实现原理及两种模式
2020/02/11 Javascript
JS自定义滚动条效果
2020/03/13 Javascript
python del()函数用法
2013/03/24 Python
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
python ddt实现数据驱动
2018/03/14 Python
在cmder下安装ipython以及环境的搭建
2018/10/19 Python
python实现五子棋小程序
2019/06/18 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
解决使用python print打印函数返回值多一个None的问题
2020/04/09 Python
英语专业个人求职自荐信
2013/09/21 职场文书
机修工工作职责
2014/02/21 职场文书
研究生毕业自我鉴定范文
2014/03/27 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
关于迟到的检讨书
2015/05/06 职场文书