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调用Oracle存储过程
Oct 09 PHP
phpmyadmin 访问被拒绝的真实原因
Jun 15 PHP
PHP字符串 ==比较运算符的副作用
Oct 21 PHP
php的大小写敏感问题整理
Dec 29 PHP
php数字游戏 计算24算法
Jun 10 PHP
深入apache配置文件httpd.conf的部分参数说明
Jun 28 PHP
web server使用php生成web页面的三种方法总结
Oct 28 PHP
kohana框架上传文件验证规则写法示例
Jul 14 PHP
php下pdo的mysql事务处理用法实例
Dec 27 PHP
php一个解析字符串排列数组的方法
May 12 PHP
使用PHP similar text计算两个字符串相似度
Nov 06 PHP
PHP回调函数与匿名函数实例详解
Aug 16 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将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
Laravel 实现添加多语言提示信息
2019/10/25 PHP
JavaScript基本对象
2007/01/11 Javascript
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
2010/07/13 Javascript
利用jQuery操作对象数组的实现代码
2011/04/27 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
基于bootstrap风格的弹框插件
2016/12/28 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
Python简单实现控制电脑的方法
2018/01/22 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
OpenCV+Python--RGB转HSI的实现
2019/11/27 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
Python爬取梨视频的示例
2021/01/29 Python
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
销售工作岗位职责
2013/12/24 职场文书
中药专业自荐信范文
2014/03/18 职场文书
企业文化口号
2014/06/12 职场文书
财务稽核岗位职责
2015/04/13 职场文书
小兵张嘎观后感
2015/06/03 职场文书
英文投诉信格式
2015/07/03 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
php将xml转化对象的实例详解
2021/11/17 PHP
vue ant design 封装弹窗表单的使用
2022/06/01 Vue.js