在mvc框架中可以看到事件类,实现事件的监听和触发。

举例:

<?php
/**
* 事件类
*/
class Event
{
// 事件绑定记录
private static $events;
/**
* 初始化
*/
public static function init()
{
self::$events = array ();
// 获取插件列表return true;
} /**
* 注册事件
*
* @param string $event
* @param mixed $callback
* @param bool $first 是否优先执行,以靠后设置的为准
*/
public static function register($event, $callback, $first=false)
{
if (! isset(self::$events[$event]))
{
self::$events[$event] = array ();
}
if($first)
{
array_unshift(self::$events[$event],$callback);
}
else
{
self::$events[$event][] = $callback;
}
} /**
* 触发事件(监听事件)
* @param name $event
* @param boolean $once
* @return mixed
*/
public static function trigger($event, &$params=array())
{
if (isset(self::$events[$event]))
{
foreach (self::$events[$event] as $item)
{
if(true === call_user_func($item,$params))
{
// 事件返回true时不继续执行其余事件
return true;
}
}
return false;
}
return true;
}
}

就是说,在框架中,我们可以注册事件,并在某点触发事件,不需要修改源代码

使用Event类监听一个事件
function addArtice()
{
.......
Event::trigger('ON_Artice_ADD',array('userInfo'=>$userInfo,'result'=>&$result)); //这里监听触发当文章被添加的时候的事件:ON_Artice_ADD
}  

注册事件:

Event::register('ON_Artice_ADD',function($data){
// 这里可以做一些事情
..........
});

没有注册,不能触发。

注册才可以触发

MVC框架入门准备(三)事件类 - 事件的监听和触发的更多相关文章

  1. DOM事件监听和触发

    EventTargetAPI定义了DOM事件(mouse事件等)的监听和触发方法,所有的DOM节点都部署了这个接口. 这个接口有三个方法:addEventListener, removeEventLi ...

  2. MVC框架入门准备(一)

    最近开发一套自己的框架,开发了一个多月,已传到git,学到了挺多,系列文章我会慢慢写挺多 这里先讲大致框架多用到的某些函数,我这里先列举一部分,网上对函数的定义,参数说明等,我就不照搬了,记录自己的理 ...

  3. SpringBoot | 第三十二章:事件的发布和监听

    前言 今天去官网查看spring boot资料时,在特性中看见了系统的事件及监听章节.想想,spring的事件应该是在3.x版本就发布的功能了,并越来越完善,其为bean和bean之间的消息通信提供了 ...

  4. 自己写一个java的mvc框架吧(三)

    自己写一个mvc框架吧(三) 根据Method获取参数并转换参数类型 上一篇我们将url与Method的映射创建完毕,并成功的将映射关系创建起来了.这一篇我们将根据Method的入参参数名称.参数类型 ...

  5. spring mvc框架入门

    目录 1.web框架分层 2.什么是springmvc 3.springmvc的优势 4.springmvc和struct的区别 (spring mvc框架入门 1.web框架分层 一般web框架可以 ...

  6. libevent (三) 事件注册与循环监听

    事件注册与循环监听 在libevent中为了监听某种事件的发生,设置事件触发后的回调函数,也就是说对该事件注册到当前的IO模型中. 事件注册 事件初始化 使用`event_new`函数来对事件进行初始 ...

  7. jQuery封装自定义事件--valuechange(动态的监听input,textarea)之前值,之后值的变化

    jQuery封装自定义事件--valuechange(动态的监听input,textarea)之前值,之后值的变化 js监听输入框值的即时变化 网上有很多关于 onpropertychange.oni ...

  8. 作业调度框架Quartz.NET-现学现用-02-任务监听

    原文:作业调度框架Quartz.NET-现学现用-02-任务监听 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. Quar ...

  9. 作业调度框架Quartz.NET-现学现用-02-任务监听 - 简书

    原文:作业调度框架Quartz.NET-现学现用-02-任务监听 - 简书 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. ...

随机推荐

  1. Rhythmk 一步一步学 JAVA (21) JAVA 多线程

    1.JAVA多线程简单示例 1.1 .Thread  集成接口 Runnable 1.2 .线程状态,可以通过  Thread.getState()获取线程状态: New (新创建) Runnable ...

  2. 下拉菜单的实现classList.add() classList.remove() class属性的添加和删除

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. MySQL GTID (四)

    七. GTID的限制以及解决方案 7.1 事务中混合多个存储引擎,会产生多个GTID. 当使用GTID,在同一个事务中,更新包括了非事务引擎(MyISAM)和事务引擎(InnoDB)表的操作,就会导致 ...

  4. Go and Beego Development

    1. Beego wiki in en and cn https://beego.me/ For API development: https://beego.me/blog/beego_api 2. ...

  5. pyqt5 sip 段错误问题

    在我装labelImg工具时,装了pyqt5,而后发现缺少sip模块,又pip安装上后,启动labelImg,报段错误. 经查资料,很容易发现,是pyqt5与sip版本不匹配造成的,具体缘由,可参看: ...

  6. SSD

    https://blog.csdn.net/WZZ18191171661/article/details/79444217 论文题目:SSD: Single Shot MultiBox Detecto ...

  7. redis的订阅和发布

    #订阅和发布有什么用呢?# 特点# 1.实现一个一对多的效果,只有一个发布者,多个订阅者# 2.实时的发布消息,广播方发布消息,所有的订阅者都会受到消息,一个人同时只能接受#一个频道 1.先写一个公共 ...

  8. Notebook computer(Ubuntu)

    ==============Mask_RCNN============== source activate flappbird cd /home/luo/Desktop/MyFile/MaskRCNN ...

  9. Halcon选择一堆region中面积第N大的region的算法实现

    以下图为例: 比如我想把面积第2小的那个“小正方形”选择出来,算法代码如下: read_image (Yuan, 'C:/Users/happy xia/Desktop/yuan.png') bina ...

  10. Windows pip安装失败:no module named pkg_resources

    通常是Setuptools安装出错,下载以下ez_setup.py文件后,先执行:ez_setup.py -U setuptools 重新安装setuptools 通过此ez_setup.py pip ...