四种回调函数
1、call_user_func
2、call_user_func_array
3、array_map
4、preg_replace_callback
call_user_func和call_user_func_array是相类似的!
先看call_user_func
call_user_func( callable $callback [, mixed $parameter [, mixed $... ]] ) 把第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数
<?php function myfunction($a,$b){ echo $a . "-----" . $b; } call_user_func(myfunction,'i am one call_user_func','i am two call_user_func');
然后再看call_user_func_array
call_user_func_array( callable $callback , array $param_arr ) 把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入
<?php function myfunction($a,$b){ echo $a . "-----" . $b; } call_user_func_array(myfunction,array("i am one call_user_func_array","i am two call_user_func_array"));
call_user_func_array不仅可以传函数,还可以调用类中的方法,但是有前提条件,该函数需要被定义为静态方法
<?php class foo{ public static function myfunction($a,$b){ echo $a . '-----' . $b; } } call_user_func_array(array(foo,myfunction),array("i am one call_user_func_array","i am two call_user_func_array")); // 写法一 call_user_func_array(["foo","myfunction"],array("i am one call_user_func_array","i am two call_user_func_array")); // 写法二 call_user_func_array("foo::myfunction",array("i am one call_user_func_array","i am two call_user_func_array")); // 写法三 call_user_func_array([new foo,'myfunction'],array("i am one call_user_func_array","i am two call_user_func_array")); //写法四, 这种写法 对象和方法必须通过数组形式传递
接下来是 array_map
<?php function cube($n){ return($n * $n * $n); } $a = array(1, 2, 3, 4, 5); $b = array_map("cube", $a); print_r($b); ?>
可以发现$a中的数组值被cube函数作为参数传进入然后返回值返回给了$b
最后再来看下preg_replace_callback,定义如下
preg_replace_callback - 执行一个正则表达式搜索并且使用一个回调进行替换
<?php $text = "April fools day is 04/01/2002"; function next_year($matches){ return $matches[1].($matches[2]+1); } echo preg_replace_callback("#(\d{2}/\d{2}/)(\d{4})#","next_year",$text);
可以看出下面内容中的年份多加了一年,那么也可以把这个函数理解为 正则匹配出来的内容 作为形参,放进回调函数中进行处理在返回!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY