四种回调函数

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);

可以看出下面内容中的年份多加了一年,那么也可以把这个函数理解为 正则匹配出来的内容 作为形参,放进回调函数中进行处理在返回!

posted @   zpchcbd  阅读(620)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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
点击右上角即可分享
微信分享提示