ClassCMS

监听钩子

普通的钩子只能在方法被执行前返回数据或修改参数,监听钩子可以在目标方法执行后,修改返回的数据.

可以实现如文章增加成功后可以主动推送给搜索引擎,删除某个用户后删除他所创建的文章等功能.

创建监听钩子与普通的钩子一样,也是在应用主文件hook方法中返回,在目标方法后加入 := 符号 即表示此钩子是监听钩子.

function hook(){
    $hooks=array();
    $hooks[]=array('hookname'=>'myread','hookedfunction'=>'test:read:=','enabled'=>1);
    Return $hooks;
}

示例

//目标应用test内的read方法
function read($file){
    return file_get_contents($file);
}

//本应用内的方法myread
function myread($class,$args,$return){//监听钩子方法,必须包含3个参数
    //$class为被监听的方法名,此处$class为test:read
    //$args为目标方法传入的参数数组,此处为array('1.txt')
    //$return为目标方法返回的数据 此处为文件1.txt内的内容
    return $return.'_classcms.com';
}

当调用C('test:read','1.txt');时,返回的数据会自动加上后缀_classcms.com

如果一个方法拥有多个监听钩子,会依次执行各个钩子.如果某个钩子返回了数据(不包括null),则将返回的数据依次传递给下个监听钩子.

监听钩子返回的数据格式应和被监听钩子的返回数据格式一致,否则在调用方法时获取了不正确的格式,程序容易报错.