You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP箭头函数与print函数的运行机制及疑问解析

为什么PHP中print函数的输出在两种场景下表现不同?

我们知道PHP的print函数始终返回1,但以下两个场景的输出表现却不一样:

场景一:使用array_map时

代码:

$arr = [10, 20, 30, 40];
$arr2 = array_map(fn ($num) => print $num, $arr);
print_r($arr2);

实际运行时会先输出10203040,随后输出:

Array
(
    [0] => 1
    [1] => 1
    [2] => 1
    [3] => 1
)

这是因为array_map的核心作用是收集回调函数的返回值来生成新数组。这里的回调是print $num——print会先完成数字的输出操作,再返回1,所以arr2的每个元素都是这个返回值1。

场景二:直接调用匿名函数时

代码:

$var = fn ($name, $age) => print "Hello my name is $name and I'm $age years old";
$var("Ahmad", 22);

输出结果是:

Hello my name is Ahmad and I'm 22 years old

这里看不到返回值1的原因很直接:print确实返回了1,但这个返回值没有被任何操作处理(比如赋值给变量、用echo打印出来)。如果想要看到这个返回值,只需要把调用结果显式输出:

echo $var("Ahmad", 22);

此时的输出会变成:

Hello my name is Ahmad and I'm 22 years old1

核心总结

  • print的固定行为是先把内容输出到标准输出,再返回1,这两个动作是独立执行的。
  • 场景一中array_map只关注回调的返回值,所以最终我们看到的是返回值组成的数组;场景二中我们只触发了print的输出动作,它的返回值没有被显式打印,所以看不到1。

内容的提问来源于stack exchange,提问作者Ahmad Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:47:39