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 相关文章推荐
MVC模式的PHP实现
Oct 09 PHP
php 之 没有mysql支持时的替代方案
Oct 09 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
Nov 07 PHP
基于Linux调试工具strace与gdb的常用命令总结
Jun 03 PHP
PHP设计模式之迭代器模式的深入解析
Jun 13 PHP
php反射类ReflectionClass用法分析
May 12 PHP
THINKPHP截取中文字符串函数实例代码
Mar 20 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
May 02 PHP
[原创]php正则删除html代码中class样式属性的方法
May 24 PHP
PHP实现链表的定义与反转功能示例
Jun 09 PHP
Laravel框架模板继承操作示例
Jun 11 PHP
thinkphp框架表单数组实现图片批量上传功能示例
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项目打包方法
2008/02/18 PHP
PHP4中session登录页面的应用
2008/07/25 PHP
不重新编译PHP为php增加openssl模块的方法
2011/06/14 PHP
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
php读取mysql的简单实例
2014/01/15 PHP
使用PHP函数scandir排除特定目录
2014/06/12 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
用jscript实现列出安装的软件列表
2007/06/18 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
原生js实现省市区三级联动代码分享
2018/02/12 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
2018/08/13 Javascript
在Angular中使用JWT认证方法示例
2018/09/10 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
命令行批量截图Node脚本示例代码
2019/01/25 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
Python自动扫雷实现方法
2015/07/25 Python
python 爬取微信文章
2016/01/30 Python
玩转python selenium鼠标键盘操作(ActionChains)
2020/04/12 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
Python3 assert断言实现原理解析
2020/03/02 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
蔻驰美国官网:COACH美国
2016/08/18 全球购物
大学生职业生涯规划书模板
2014/01/18 职场文书
社区活动总结报告
2014/05/05 职场文书
效能风暴心得体会
2014/09/04 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
门面租赁合同范文
2019/08/06 职场文书
Spring 使用注解开发
2022/05/20 Java/Android