Think/Hook.php
public static function listen($tag, &$params = null)
    {
        if (isset(static::$tags[$tag])) {
            if (APP_DEBUG) {
                G($tag.'Start');
                trace('[ '.$tag.' ] --START--', '', 'INFO');
            }
            foreach (static::$tags[$tag] as $name) {
                APP_DEBUG && G($name.'_start');
                $result = static::exec($name, $tag, $params);
                if (APP_DEBUG) {
                    G($name.'_end');
                    trace('Run '.$name.' [ RunTime:'.G($name.'_start', $name.'_end', 6).'s ]', '', 'INFO');
                }
                if (false === $result) {
                    // 如果返回false 则中断插件执行
                    return;
                }
            }
            // 记录行为的执行日志
            if (APP_DEBUG) {
                trace('[ '.$tag.' ] --END-- [ RunTime:'.G($tag.'Start', $tag.'End', 6).'s ]', '', 'INFO');
            }
        }

        return;
    }
public static function listen($tag, &$params = null)
    {
        if (isset(static::$tags[$tag])) {
            if (APP_DEBUG) {
                G($tag.'Start');
                trace('[ '.$tag.' ] --START--', '', 'INFO');
            }
            foreach (static::$tags[$tag] as $name) {
                APP_DEBUG && G($name.'_start');
                $result = static::exec($name, $tag, $params);
                if (APP_DEBUG) {
                    G($name.'_end');
                    trace('Run '.$name.' [ RunTime:'.G($name.'_start', $name.'_end', 6).'s ]', '', 'INFO');
                }
                if (false === $result) {
                    // 如果返回false 则中断插件执行
                    return;
                }
            }
            // 记录行为的执行日志
            if (APP_DEBUG) {
                trace('[ '.$tag.' ] --END-- [ RunTime:'.G($tag.'Start', $tag.'End', 6).'s ]', '', 'INFO');
            }
        }

        return;
    }
监听标签的插件

@param string $tag 标签名称
@param mixed $params 传入参数

@return void