监听钩子
普通的钩子只能在方法被执行前返回数据或修改参数,监听钩子可以在目标方法执行后,修改返回的数据.
可以实现如文章增加成功后可以主动推送给搜索引擎,删除某个用户后删除他所创建的文章等功能.
创建监听钩子与普通的钩子一样,也是在应用主文件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),则将返回的数据依次传递给下个监听钩子.
监听钩子返回的数据格式应和被监听钩子的返回数据格式一致,否则在调用方法时获取了不正确的格式,程序容易报错.