php观察者模式和注册数模式,PHP观察者模式
观察者模式的核心是允许你的应用程序注册一个回调,当某个特定的事件发生时便会触发它。实现观察者模式,我们使用一个名为Event的类实现它,这个类有2个公共的方法。
1. registerCallback() :这个方法允许你用规定的名称附加许多回调到一个事件中
2. trigger() :这个方法将会触发刚才命名的事件,并调用该事件已注册的任何回调。
class Event{
static protected $callback = array();
static public function registerCallback($eventName,$callback){
if(!is_callable($callback)){
throw new Exception("Invalid callback");
}
$eventName=strtolower($eventName);
self::$callback[$eventName][]=$callback;
}
static public function trigger($eventName,$data){
$eventName = strtolower($eventName);
if(isset(self::$callback[$eventName])){
foreach(self::$callback[$eventName] as $callback){
$callback($data);
}
}
}
}
注册事件:
class LogCallback{
public function __invoke($data){
echo "Log Data".$data;
echo "__invoke方法使用:当运行脚本试图将对象作为一个方法使用时触发".$data;
}
}
header("Content-Type:text/html; charset=utf-8");
Event::registerCallback('save',new LogCallback());
Event::registerCallback('save',function($data){
echo "匿名函数调用".$data;
echo "接下来触发事件";
});
触发事件:
class MyDataRecord{
public function save(){
Event::trigger('save',"
");
}
}
$evt=new MyDataRecord();
$evt->save();
php观察者模式和注册数模式,PHP观察者模式相关推荐
- 观察者模式VS发布订阅模式区别
观察者模式VS发布订阅模式区别 观察者模式:订阅者收集函数,发布者循环调用 发布订阅:收集发布单独给一个中介 对比 以结构来分辨模式,发布订阅模式相比观察者模式多了一个调度中心: 以意图来分辨模式,都 ...
- 慕课网----大话PHP设计模式 三(三种基本设计模式-工厂模式,单例模式,注册树模式)
1)工厂模式: 工厂方法或者类生成对象,而不是代码中直接new 多用来生成对象 好处.如果很多个文件都使用了这个类的话,如果修改需要去每个文件下都进行修改,而使用工厂模式的话,则只用在类里面修改创建方 ...
- java observer模式_Java观察者模式(Observer)详解及应用
Java观察者模式(Observer)详解及应用 (2011-12-15 14:03:30) 标签: 杂谈 Java观察者模式(Observer)详解及应用 由于网站带有弱sns功能,因此需要设计关注 ...
- 发布订阅模式vs观察者模式
背景 最近在研究react的状态管理器zustand时,研究源码时发现其组件注册绑定是通过观察者模式结合react hooks实现更新的.而联想之前写vue的时候,经常会用到vue内置的自定义事件进行 ...
- 设计模式之观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式、解释器模式
前言 这是设计模式的最后一章,包含了剩余的 行为型模式 中的 观察者模式.中介者模式.迭代器模式.访问者模式.备忘录模式.解释器模式 系列文章 第一章:7种设计原则之单一职责原则.接口隔离原则.依赖倒 ...
- 8-设计模式之行为型模式二(状态模式、观察者模式、中介者模式)
设计模式之行为型模式二(状态模式.观察者模式.中介者模式) 6.5 状态模式 6.5.1 概述 6.5.2 结构 6.5.3 案例实现 6.5.4 优缺点 6.5.5 使用场景 6.6 观察者模式 6 ...
- 行为型模式之观察者模式
学习设计模式,让你提升百倍 专栏 重点文章 设计模式 设计模式基础前奏(上) 设计模式 设计模式基础前奏(下) 设计模式 创建者模式之单例模式 设计模式 创建者模式之工厂模式 设计模式 创建者模式之原 ...
- 深入理解观察者模式与发布订阅模式
观察者模式与发布订阅模式区别 (全文很长,认真读完相信你会有所收获) 纸上得来终觉浅 观察者模式与发布订阅模式区别 抽象模型 观察者模式 发布-订阅模式 结论 困惑 发布订阅模式?? jQuery的发 ...
- 迭代器模式与观察者模式
迭代器模式与观察者模式 参考教程:https://www.bilibili.com/video/BV1G4411c7N4 代码实现 Github:https://github.com/yaokuku1 ...
最新文章
- 精选Python开源项目Top10!
- Nginx使用http_accesskey_module防盗链,告别referer,告别伪装
- c 自动生成html报告,Pytest框架之 - Allure生成漂亮的HTML图形测试报告
- Thymeleaf抽取公共页面片段
- JSP门户--JetSpeed
- 在VMware 14中安装Centos7
- Java缓存框架使用EhCache结合Spring AOP
- PAT:1032. Sharing (25) AC
- 传销组织生化环材说(正论)
- 第十三周项目1-数组大折腾(一)
- php抽象类初始化方法,php – 抽象类方法声明
- Rust : 求出一个字符串数组中最长的公共连续子序列
- 江苏图采上传自定义证件照
- linux自动加密软件开发,【天锐绿盾加密软件支持Linux_信息安全管理系统_文件自动加密_文档加密_图纸加密_网络实时监控_网络行为管理_内网安全的软件系统】免费在线试用_文档管理_选软件网...
- ASS字幕特效代码个人收藏
- js常用正则 验证数字正则
- 极路由3(HC5861)刷Padavan固件教程
- 见习后的感想之关于献血
- java 指纹匹配算法_java – 从生物识别指纹考勤设备中检索数据
- java程序员生日祝福语_给朋友过生日的祝福语
热门文章
- VUE学习和开发中的注意点总结(一),便于回顾(不断完善补充。)
- Dubbo是如何进行远程服务调用的?(源码流程跟踪)
- java值传递string_关于java:按值传递(StringBuilder与String)
- 四年级计算机笔试题,四年级计算机考试卷.doc
- python函数应用_python 函数应用
- Linux启动SAP服务,sap启动相关
- java volatile lock_Java并发学习笔记 -- Java中的Lock、volatile、同步关键字
- c语言验证24点,C语言解24点游戏程序
- 不用数组,解决众数问题(前提 :众数出现的次数必须大于n/2)
- hashmap hash冲突怎么解决_HashMap原理及冲突之简谈