PHP 如何写回调函数
打开电脑写代码时,你有没有过这种经历?比如想点个外卖,系统会等你选完餐再处理支付;想看剧,网页得先加载完所有视频片段才让你播放。代码里也有类似的“等一等再干活”的场景,这就需要用到回调函数,而PHP里的回调函数写法,其实就像日常给朋友派任务,不难理解。
什么是回调函数?用取快递举个例子
想象你把取快递的任务交给朋友,让他“取到后告诉我一声”——这个“取到后通知你”的约定,就是回调。代码里的回调函数,其实是把一个函数当成参数传给另一个函数,等特定事件(比如任务完成)触发时,再执行这个传过去的函数。

举个生活化的例子:你让同事帮你整理本周的周报,约定“整理完把内容发我微信”。这里“整理完发微信”就是回调,而“发微信”这个动作,本质就是一个回调函数。
最常用的写法:直接写匿名函数
PHP里最基础的回调写法,是用匿名函数(没有名字的函数),适合简单的临时任务。
比如我们想统计班级里哪些同学的成绩超过80分,就可以用回调来处理:
先写一个统计函数,把每个同学的成绩传给回调,判断是否符合要求;再用匿名函数写判断规则,最后得到结果。
代码大概是这样的:
`php
// 统计函数,把每个同学的成绩交给回调处理
function filterScore($scores, $callback) {
$result = [];
foreach ($scores as $name => $score) {
// 触发回调,传入当前同学的姓名和成绩
if ($callback($name, $score)) {
$result[] = $name;
}
}
return $result;
}
// 同学成绩数组
$students = ['小明' => 75, '小红' => 88, '小刚' => 92, '小丽' => 78];
// 用匿名函数当回调,判断成绩是否超过80
$goodStudents = filterScore($students, function($name, $score) {
return $score > 80;
});
// 输出结果:小红、小刚
print_r($goodStudents);
`
这个写法就像你直接跟朋友说“帮我把成绩过80的同学找出来”,朋友立刻按你的要求做,不用多解释。
进阶写法:用普通函数当回调
如果判断规则比较固定,比如永远要找“成绩超过80分的同学”,可以把这个判断写成独立的普通函数,再把函数名当回调传进去。
还是用刚才的例子,把判断逻辑抽成单独的函数:
`php
// 固定的判断函数
function isGoodScore($name, $score) {
return $score > 80;
}
// 传函数名当回调
$goodStudents = filterScore($students, 'isGoodScore');
`
这种写法就像你跟朋友说“按之前约定的,把成绩过80的找出来”,朋友知道规则,不用你临时说,适合重复使用的场景。
注意小细节:用use传递外部变量
有时候回调里需要用到外部的变量,比如你想把“80分”这个分数线改成可调整的,这时候就要用use关键字把外部变量传给匿名函数。
比如把分数线改成变量:
`php
function filterScore($scores, $callback) {
$result = [];
foreach ($scores as $name => $score) {
if ($callback($name, $score)) {
$result[] = $name;
}
}
return $result;
}
$students = ['小明' => 75, '小红' => 88, '小刚' => 92, '小丽' => 78];
$passLine = 85; // 可调整的分数线
// 用use引入外部变量$passLine
$goodStudents = filterScore($students, function($name, $score) use ($passLine) {
return $score > $passLine;
});
// 输出:只有小刚
print_r($goodStudents);
`
这就像你跟朋友说“按我现在定的85分,把符合的找出来”,把当前的规则告诉朋友,不会用之前的80分,灵活调整。
其实PHP写回调函数,核心就是“把函数当参数传,触发时再执行”,不管是匿名函数还是普通函数,只要根据场景选对写法,就能轻松实现需要的逻辑,就像日常派任务一样,简单又实用。