PHP疑问:为何含echo的函数赋值给变量时自动输出内容?
问题:PHP中调用含echo的函数赋值给变量时为何自动输出内容?
我在PHP里遇到一个疑问:当把内部包含echo语句的函数赋值给变量时,不用echo就会自动输出内容,这是为什么?我肯定漏掉了函数相关的基础原理,但一直理不清。
之前我定义变量时,只有用echo才会把值输出到浏览器或终端,示例:
$value = 3;// 不会输出任何内容,只是定义变量 echo $value;// 输出3,因为用了echo
但如果把一个自带echo语句的函数赋值给变量,赋值操作会自动触发echo输出,示例:
function number() {echo "3";} $number = number(); // 直接输出:3
请问有人能理解我的问题吗?我表述清楚了吗?
解答
核心原因是:你在赋值语句里调用了函数,函数一被调用就会立刻执行其内部的所有代码,包括echo语句,和你是否把返回值赋值给变量无关。
具体拆解:
- 当你写
$number = number();时,PHP会先执行number()这个函数调用,函数体里的echo "3"会在函数执行的瞬间直接输出内容。 - 你的
number()函数没有写return语句,所以它的返回值是PHP默认的null,最终$number被赋值的是null,但这个赋值动作和函数执行时的输出完全是两回事。
对比用return的情况就能更清楚:
function number() { return "3"; // 用return返回值,而非直接echo } $number = number(); // 仅执行函数并存储返回值,不会输出内容 echo $number; // 此时用echo才会输出3
简单来说:函数调用的优先级高于赋值,只要你写了函数名(),PHP就会先执行一遍函数里的所有代码,输出语句自然会在这个阶段执行,和后续是否把返回值存到变量没有关系。
内容的提问来源于stack exchange,提问作者Abby Baker
相关产品推荐
相关产品推荐

