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 相关文章推荐
Discuz 5.0 中读取纯真IP数据库函数分析
Mar 16 PHP
深入apache host的配置详解
Jun 09 PHP
PHP以指定字段为索引返回数据库所取的数据数组
Jun 30 PHP
PHP中获取时间的下一周下个月的方法
Mar 18 PHP
PHP从FLV文件获取视频预览图的方法
Mar 12 PHP
php根据日期显示所在星座的方法
Jul 13 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
May 04 PHP
php魔术方法功能与用法实例分析
Oct 19 PHP
php获取网站根目录物理路径的几种方法(推荐)
Mar 04 PHP
[原创]php正则删除img标签的方法示例
May 27 PHP
PHP代码覆盖率统计详解
Jul 22 PHP
PHP 99乘法表的几种实现代码
Oct 13 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
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
Laravel 5框架学习之向视图传送数据
2015/04/08 PHP
jQuery 浮动广告实现代码
2008/12/25 Javascript
JQery 渐变图片导航效果代码 漂亮
2010/01/01 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
手把手教你用Node.js爬虫爬取网站数据的方法
2018/07/05 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
python实现批量改文件名称的方法
2015/05/25 Python
python检查序列seq是否含有aset中项的方法
2015/06/30 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
浅谈Python在pycharm中的调试(debug)
2018/11/29 Python
python pandas模块基础学习详解
2019/07/03 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
在python中使用nohup命令说明
2020/04/16 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
携程英文网站:Trip.com
2017/02/07 全球购物
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
物业经理自我鉴定
2014/03/03 职场文书
新春寄语大全
2014/04/09 职场文书
推广活动策划方案
2014/08/23 职场文书
2015年司机工作总结
2015/04/23 职场文书
雷锋的观后感
2015/06/10 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang
详解nginx进程锁的实现
2021/06/14 Servers
JavaScript分页组件使用方法详解
2021/07/26 Javascript
Python学习之时间包使用教程详解
2022/03/21 Python