博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php中自定义事件---事件驱动
阅读量:6470 次
发布时间:2019-06-23

本文共 1867 字,大约阅读时间需要 6 分钟。

PHP中自定义事件驱动,处理机制。

原文:https://www.cnblogs.com/mafeifan/p/4322271.html

--------------------------------

 

看下面的事件类

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]);         else            unset(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);// 因为已经执行过了,再次调用返回了falseEvent::trigger('walkOnce');

 

 

 
 
你可能感兴趣的文章
使用Akka Actor和Java 8构建反应式应用
查看>>
curl常用命令详解
查看>>
saltstack 添加计划任务
查看>>
Puppet module命令参数介绍(六)
查看>>
《UNIX网络编程》中第一个timer_server的例子
查看>>
CISCO 路由器(4)
查看>>
网络服务搭建、配置与管理大全(Linux版)
查看>>
Silverlight 5 Beta新特性[4]文本缩进控制
查看>>
springMVC多数据源使用 跨库跨连接
查看>>
简单java在线测评程序
查看>>
录音和朗诵的实现
查看>>
Git服务端和客户端安装笔记
查看>>
Spring Security(14)——权限鉴定基础
查看>>
IntelliJ IDEA快捷键
查看>>
【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(下)
查看>>
MongoDB的基础使用
查看>>
进程间通信——命名管道
查看>>
LINUX 重定向的知识
查看>>
ssh登陆不需要密码
查看>>
ARP
查看>>