在函数中使用'echo'时,为什么结果出现在前一行?

时间:2010-12-12 15:37:21

标签: php function return-value echo

我写了一个函数,它在链接表的另一端回显了id。

当我在调用函数的页面中写入时 -

echo "<br/>getalbumartistfunction: ".get_albumartistid($thisalbum);

它返回上面的行上的artist_id编号,其中我有该函数调用。 所以我进入函数并将它从'echo'切换到'return',现在它就像我期望的那样出现在冒号之后(并且可能更符合我的需要)。

所以它有效。但是我非常困惑为什么当函数设置为回显它时它会在前一行显示结果。

5 个答案:

答案 0 :(得分:2)

get_albumartistid中的echo在调用函数时立即执行,而echo“
...”在回显之前汇编字符串 - 基本上在它回响之前缓冲整个事物。返回而不是echo是处理此问题的正确方法,因为这将有效地用返回的字符串替换函数调用。如果你要使用echo,你必须:

echo "<br/>getalbumartistfunction: ";
get_albumartistid($thisalbum);

有效地成为:

echo "<br/>getalbumartistfunction: ";
echo "<The artist id>";

在您的原始示例中,执行顺序为:

echo "<The artist id>";
echo "<br/>getalbumartistfunction: ";

由于所有回声都在调用时立即发生,并且PHP没有完成缓冲外部​​echo语句。

答案 1 :(得分:1)

由于在调用echo之前需要知道echo的参数,因此之前调用函数get_albumartistid。因此,函数内的任何语句也在echo之前调用。这就是为什么函数内的echo将在函数外的echo之前输出数据。

答案 2 :(得分:1)

因为在输出整个回声之前评估get_albumartistid函数,即get_albumartistid内的回声在echo "<br/>getalbumartistfunction: "之前执行。

答案 3 :(得分:1)

echo将内容直接发送到输出缓冲区。如果函数中有echo语句,则会发生以下情况:

  1. PHP遇到外部echo语句。它开始构造要发送到输出缓冲区的字符串。它看到的第一件事是字符串"<br/>getalbumartistfunction: "。接下来,连接到前一个字符串,是对函数get_albumartistid()的调用。它需要评估这个函数调用来完成对连接的评估,所以......
  2. PHP执行函数get_albumartistid()。该函数包含echo语句。 echo语句的内容将发送到输出缓冲区。该函数返回null
  3. 函数返回null,因此PHP将null连接到前一个字符串(保持不变)。
  4. 外部echo中的字符串现已完成,echo已准备好返回。它将字符串发送到输出缓冲区。

答案 4 :(得分:1)

表达式与执行顺序。

您的echo "string" . get()会导致以下执行流程:

  • PHP结合了echo之后的表达式。回声无法执行。
  • 连接中的第一个字符串是静态的。
  • 要获取第二个字符串,需要调用该函数。当这个功能做任何有趣的事情(发屁声或打印出来的东西)时,它就会马上就这样做。
  • 这两个字符串部分组合成一个新的临时字符串。
  • 现在只能回显所有内容。