PHP 如何写回调函数

打开电脑写代码时,你有没有过这种经历?比如想点个外卖,系统会等你选完餐再处理支付;想看剧,网页得先加载完所有视频片段才让你播放。代码里也有类似的“等一等再干活”的场景,这就需要用到回调函数,而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写回调函数,核心就是“把函数当参数传,触发时再执行”,不管是匿名函数还是普通函数,只要根据场景选对写法,就能轻松实现需要的逻辑,就像日常派任务一样,简单又实用。

上一篇 Swift编程语言的核心特性与实际应用场景科普