MVC框架入门准备(三)事件类

在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){
    // 这里可以做一些事情
    ..........
});

没有注册,不能触发。

注册才可以触发

原文地址:https://www.cnblogs.com/zhenghongxin/p/6861387.html