php中自定义事件---事件驱动
PHP中自定义事件驱动,处理机制。
原文:https://www.cnblogs.com/mafeifan/p/4322271.html
--------------------------------
PHP中的事件处理
看下面的事件类
class Event { protected static $listens = array(); /*** [listen 注册监听事件]* @param [string] $event [事件名]* @param [callback] $callback [事件内容]* @param [bool] $once [是否是一次性事件,默认false]*/public static function listen($event, $callback, $once=false){ if(!is_callable($callback)) return false; self::$listens[$event][] = array('callback'=>$callback, 'once'=>$once); return true; } // 一次性事件public static function one($event, $callback){ return self::listen($event, $callback, true); } public static function remove($event, $index=null){ if(is_null($index)) unset(self::$listens[$event]); elseunset(self::$listens[$event][$index]); } public static function trigger(){ // 没有参数(传递事件) 退出if(!func_num_args()) return; // 事件名的数组$args = func_get_args(); // 将函数名(callback)赋给 $event$event = array_shift($args);// 检测事件是否被注册过,没有则退出if(!isset(self::$listens[$event])) return false; foreach( self::$listens[$event] as $index=>$listen){ $callback = $listen['callback']; $listen['once'] && self::remove($event, $index); call_user_func_array($callback, $args); } } }
这个类包含了事件的注册,触发及移除方法。
下面添加一个事件,事件名叫walk,事件的动作就是输出 "I am walking...n" ,执行后。该事件会存储在 $listens 这个数组中。
Event::listen('walk', function($a='',$b=''){ echo "I am walking...n" .$a .$b; });
触发walk事件
Event::trigger('walk');
也可以传参数进去
Event::trigger('walk','~~~','!!!');
如果不移除该事件,触发一次就会执行一次。
而一次性事件执行过一次就会被销毁。再次调用没有任何反应。
Event::one('walkOnce', function(){ echo "run...once"; }); Event::trigger('walkOnce',true);// 因为已经执行过了,再次调用返回了false Event::trigger('walkOnce');
转载于:https://www.cnblogs.com/oxspirt/p/9515457.html
php中自定义事件---事件驱动相关推荐
- 一个不错的讲解flex 3中自定义事件的文章
一个不错的讲解flex 3中自定义事件的文章 http://wangyisong.javaeye.com/blog/376118,一个不错的讲解flex 3中自定义事件的文章 posted on 20 ...
- javascript中自定义事件
自定义事件:用户可以指定事件类型,这个类型实际上就是一个字符串,然后为这个类型的事件指定事件处理函数,可以注册多个事件处理函数(用数组管理),调用时,从多个事件处理函数中找到再调用. function ...
- Flash/Flex学习笔记(34):AS3中的自定义事件
类似C#中自定义事件需要一个自定义的EventArgs子类一样,AS3也需要开发者自定义一个Event类的子类,这里我们假设一种场景:设计一个Person(人物)类,里面有Age(年龄),Name(姓 ...
- Vue学习笔记05 组件的自定义事件-组件通信-$nextTick-脚手架解决ajax跨域-插槽-过渡动画
文章目录 Vue学习笔记05 父组件给子组件传值 注意点 子组件给父组件传值 父组件接受子组件的传值 通过函数 组件的自定义事件 事件绑定的第一种写法 @或v-on 事件绑定的第二种写法:使用ref ...
- Vue 组件间通信方式:自定义事件
前言 前期分享的测试开发系列!Vue 组件间通信方式汇总,总有一款适合你( 5分钟教程-附项目实战案例 )中介绍了 3 种组件间的通信方法,分别是: props 全局事件总线 消息订阅与发布 今天给大 ...
- 如何在JavaScript中使用自定义事件
2019独角兽企业重金招聘Python工程师标准>>> JavaScript 的事件处理是所有浏览器端程序的基本必备技巧.当目标元素的事件被触发时,比如按钮被点击,鼠标移动,或者是表 ...
- 「后端小伙伴来学前端了」关于Vue中的自定义事件,组件绑定自定义事件实现通信
傍晚的月亮 前言 原本这篇打算写Vue中的那个全局事件总线的原理,但是发现自己少写了这个自定义事件,不讲明白这个自定义事件的操作,不好写全局事件原理,于是就有了这篇文章拉. 一.v-on指令 要讲自定 ...
- java 自定义监听_Spring 中的自定义事件
Spring 中的自定义事件 编写和发布自己的自定义事件有许多步骤.按照在这一章给出的说明来编写,发布和处理自定义 Spring 事件. 步骤 描述 1 创建一个名称为SpringExample的项目 ...
- flex中dispatchEvent的用法(自定义事件) .
Evevt和EventDispatcher类在as3的事件机制中是很重要的角色,dispatchEvent()是EventDispatcher类的一个事件发送方法,它可以发送出Event类或其子类的实 ...
- [vue] vue自定义事件中父组件怎么接收子组件的多个参数?
[vue] vue自定义事件中父组件怎么接收子组件的多个参数? 子组件传递多个参数,父组件用展开运算符获取 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起 ...
最新文章
- 【问链财经-区块链基础知识系列】 第四十课 港版支付宝的区块链跨境汇款与Ripple、Circle大不同
- CVPR 2021 | 破坏方法失效,新框架MagDR让Deepfake稳定难攻
- 在 GridView 控件中添加一列复选框51
- Generative Adversarial Nets[BEGAN]
- python汉字长度_行中字符串的长度(Python)
- 关于硬盘运行在不同模式下的疑难解答
- VS2010 修改模板文件,增加默认注释
- 3.MySQL索引(一)介绍索引
- 多种方式创建 Entity Framework Core 上下文
- 获取当前位置信息-ios
- 考研:无穷小微积分的不适症
- 金税盘专、普红字发票开具步骤及(税盘注销方法)
- Xcode打包ipa的基本步骤(有证书和无证书)
- JavaScript JQuery 交互式Web前端开发
- 如何使用REST Assured执行API测试
- 人工智能与大数据时代-2020
- [198].打家劫舍
- canvas 裁剪签名图片 去除多余的空白
- RecyclerView实现竖向无限循环滚动的列表
- ElementUi中轮播图走马灯如何实现添加图片