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
相关产品推荐
相关产品推荐

