博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP中的事件处理
阅读量:5061 次
发布时间:2019-06-12

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

看下面的事件类

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');

 

转载于:https://www.cnblogs.com/mafeifan/p/4322271.html

你可能感兴趣的文章
django Models 常用的字段和参数
查看>>
linux -- 嵌入式linux下wifi无线网卡驱动
查看>>
SVN使用教程总结
查看>>
SQL中varchar和nvarchar有什么区别?
查看>>
OpenCV矩阵运算总结
查看>>
Java Build Practice 4:Extend and Invoke Ant API
查看>>
[转] Transformer图解
查看>>
FreeBSD方式安装 MAC OSX
查看>>
Linux 根文件系统制作
查看>>
IOS--沙盒机制
查看>>
使用 JointCode.Shuttle 访问任意 AppDomain 的服务
查看>>
sqlite的坑
查看>>
digitalocean --- How To Install Apache Tomcat 8 on Ubuntu 16.04
查看>>
【题解】[P4178 Tree]
查看>>
Jquery ui widget开发
查看>>
更改git仓库地址
查看>>
有标号DAG计数 [容斥原理 子集反演 组合数学 fft]
查看>>
Recipe 1.4. Reversing a String by Words or Characters
查看>>
Rule 1: Make Fewer HTTP Requests(Chapter 1 of High performance Web Sites)
查看>>
sql注入
查看>>