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 相关文章推荐
如何解决CI框架的Disallowed Key Characters错误提示
Jul 05 PHP
php获取随机数组列表的方法
Nov 13 PHP
Opcache导致php-fpm崩溃nginx返回502
Mar 02 PHP
PHP的Socket网络编程入门指引
Aug 11 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
PHP实现的XML操作类【XML Library】
Dec 29 PHP
phpStudy配置多站点多域名和多端口的方法
Sep 01 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
PHP生成推广海报的方法分享
Apr 22 PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 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
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
php 文本文件的读取效率
2012/02/10 PHP
php动态函数调用方法
2015/05/21 PHP
PHP实现截取中文字符串不出现?号的解决方法
2016/12/29 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
Add a Formatted Table to a Word Document
2007/06/15 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
js切换光标示例代码
2013/10/10 Javascript
解决extjs grid 不随窗口大小自适应的改变问题
2014/01/26 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
jQuery:unbind方法的使用详解
2017/08/14 jQuery
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
微信小程序实现自动定位功能
2018/10/31 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
Python做文本按行去重的实现方法
2016/10/19 Python
彻底搞懂Python字符编码
2018/01/23 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
python入门教程之基本算术运算符
2020/11/13 Python
解决python3中os.popen()出错的问题
2020/11/19 Python
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
Shell脚本如何向终端输出信息
2014/04/25 面试题
公务员平时考核实施方案
2014/03/11 职场文书
公司聘任书模板
2014/03/29 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
2014年财政工作总结
2014/12/10 职场文书
2016教师国培研修感言
2015/12/08 职场文书