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 相关文章推荐
使用apache模块rewrite_module (转)
Feb 14 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
May 26 PHP
PHP查询MySQL大量数据的时候内存占用分析
Jul 22 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
php实现通过ftp上传文件
Jun 19 PHP
php删除数组中重复元素的方法
Dec 22 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
Dec 31 PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 PHP
Yii2实现让关联字段支持搜索功能的方法
Aug 10 PHP
php检测mysql表是否存在的方法小结
Jul 20 PHP
详解Yaf框架PHPUnit集成测试方法
Dec 27 PHP
Yii使用DbTarget实现日志功能的示例代码
Jul 21 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使用数组填充下拉列表框的方法
2015/03/31 PHP
laravel学习教程之关联模型
2016/07/30 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
javascript 写类方式之六
2009/07/05 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
对比分析json及XML
2014/11/28 Javascript
浅谈JS中json数据的处理
2016/06/30 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
Nodejs回调加超时限制两种实现方法
2017/06/09 NodeJs
JavaScript的setter与getter方法
2017/11/29 Javascript
微信小程序中this.data与this.setData的区别详解
2018/09/17 Javascript
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
[01:08:43]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第一场 1月9日
2021/03/11 DOTA
Python写的一个简单DNS服务器实例
2014/06/04 Python
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
举例详解Python中的split()函数的使用方法
2015/04/07 Python
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
python读取文件名并改名字的实例
2019/01/07 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
详解Python 循环嵌套
2020/07/09 Python
用 Django 开发一个 Python Web API的方法步骤
2020/12/03 Python
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
毕业生的自我评价范文
2013/12/31 职场文书
个人批评与自我批评
2014/10/15 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
个人工作年终总结
2015/03/09 职场文书
员工旷工检讨书
2015/08/15 职场文书
描述鲁迅的名言整理,一生受用
2019/08/08 职场文书
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers