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防止form重复提交的方法
Jul 01 PHP
php输出全球各个时区列表的方法
Mar 31 PHP
PHP+jQuery+Ajax实现用户登录与退出
Apr 27 PHP
PHP汉字转换拼音的函数代码
Dec 30 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
PHP封装的MSSql操作类完整实例
May 26 PHP
php 的反射详解及示例代码
Aug 25 PHP
PHP简单遍历对象示例
Sep 28 PHP
PHP实现的同步推荐操作API接口案例分析
Nov 30 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
Aug 01 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
Sep 29 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 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中截取字符串支持utf-8
2007/01/18 PHP
php模板引擎技术简单实现
2016/03/15 PHP
JavaScript 高级语法介绍
2009/06/15 Javascript
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
js时间日期格式化封装函数
2014/12/02 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
JQuery特殊效果和链式调用操作示例
2019/05/13 jQuery
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
JavaScript中的惰性载入函数及优势
2020/02/18 Javascript
Vue.js中Line第三方登录api的实现代码
2020/06/29 Javascript
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
python实现彩色图转换成灰度图
2019/01/15 Python
python图的深度优先和广度优先算法实例分析
2019/10/26 Python
python实现修改固定模式的字符串内容操作示例
2019/12/30 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
酒店总经理欢迎词
2014/01/15 职场文书
简历自我评价模版
2014/01/31 职场文书
创业融资计划书
2014/04/25 职场文书
公司外出活动方案
2014/08/14 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript
vscode中使用npm安装babel的方法
2021/08/02 Javascript