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 相关文章推荐
一个用于mysql的数据库抽象层函数库
Oct 09 PHP
利用递归把多维数组转为一维数组的函数
Oct 09 PHP
php cookis创建实现代码
Mar 16 PHP
php中计算程序运行时间的类代码
Nov 03 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
Jun 14 PHP
php 表单提交大量数据发生丢失的解决方法
Mar 03 PHP
php模拟服务器实现autoindex效果的方法
Mar 10 PHP
php通过文件头判断格式的方法
May 28 PHP
php+ajax+json 详解及实例代码
Dec 12 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
Mar 07 PHP
PHP Web表单生成器案例分析
Jun 02 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
web方式ftp
2006/10/09 PHP
php横向重复区域显示二法
2008/09/25 PHP
PHP curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
PHP 快速排序算法详解
2014/11/10 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
Javascript 中文字符串处理额外注意事项
2009/11/15 Javascript
JavaScript实用技巧(一)
2010/08/16 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
JS获取后台Cookies值的小例子
2013/03/04 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
JS实现点击按钮后框架内载入不同网页的方法
2015/05/05 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
vue单页应用中如何使用jquery的方法示例
2017/07/27 jQuery
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
原生js实现购物车功能
2020/09/23 Javascript
Python中使用支持向量机(SVM)算法
2017/12/26 Python
python内存动态分配过程详解
2019/07/15 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
澳大利亚足球鞋和服装购物网站:Ultra Football
2018/10/11 全球购物
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
计算机专业毕业生自荐信范文
2014/03/06 职场文书
校园学雷锋活动月总结
2014/03/09 职场文书
暑假家长评语大全
2014/04/17 职场文书
期末复习计划
2015/01/19 职场文书
关于长城的导游词
2015/01/30 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
教你用python控制安卓手机
2021/05/13 Python