阅读(3528) (1)

do_hooks()

2017-06-13 17:15:37 更新

作用:执行 Api Hook 回调函数。 语法: null do_hooks(string $api[, mixed $input])

参数

  • $api 待执行的 API 名称,使用点语法,如 user.add
  • $input 传入的参数或者获取模块信息时得到的数组

别名

  • do_actions()

说明$input 参数是 Api Hook 回调函数的参数。在使用 add_hook() 函数为 API 添加回调函数时,回调函数可以选择传入 $input 参数,也可以不传入参数,可以选择返回值,也可以不返回。$input 参数是一个引用传递,默认值为 null。但除了 null 外,其他返回值都会被应用到 $input 参数中,等待下一个回调函数接收它。

需要注意的是,如果在某一个 Api Hook 回调函数中,return error() 被调用,即设置了错误信息,那么序列中的其他回调函数将不会再被调用。ModPHP 不会也没有能力(在顾及 Socket 服务时)自动报告错误消息给调用器,你需要手动这么做。

在模块类方法中调用了 do_hooks() 函数后,你需要使用if(error()) return [error()](http://modphp.hyurl.com/function-error); 来判断在出现错误时将错误返回给调用器。

示例

<?php
/** 自定义一个 Api 并绑定回调函数 */
add_hook('text.change', function($text){ //此时传入 $text 参数和不传入是一样的
    $text = 'Hi, ModPHP';
    return $text; //返回以应用更改
}, false);
$text  = 'Hello, World!'; //这个 $text 和 add_hook() 中的 $text 不是一回事
do_hooks('test.change', $text); //执行回调函数
echo $text; //将输出 Hi, ModPHP
/** 错误控制 */
class something extents mod{
    static function act($arg = array()){
        do_hooks('mod.act', $arg); //可能会出现错误,错误信息存储在 error() 中
        if(error()) return error(); //如果 error() 返回值不为空(有错误),则将错误返回给调用器
        /** 其他代码 */
    }
}