我写了一个函数,它在链接表的另一端回显了id。
当我在调用函数的页面中写入时 -
echo "<br/>getalbumartistfunction: ".get_albumartistid($thisalbum);
它返回上面的行上的artist_id编号,其中我有该函数调用。 所以我进入函数并将它从'echo'切换到'return',现在它就像我期望的那样出现在冒号之后(并且可能更符合我的需要)。
所以它有效。但是我非常困惑为什么当函数设置为回显它时它会在前一行显示结果。
答案 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
语句,则会发生以下情况:
echo
语句。它开始构造要发送到输出缓冲区的字符串。它看到的第一件事是字符串"<br/>getalbumartistfunction: "
。接下来,连接到前一个字符串,是对函数get_albumartistid()
的调用。它需要评估这个函数调用来完成对连接的评估,所以...... get_albumartistid()
。该函数包含echo
语句。 echo
语句的内容将发送到输出缓冲区。该函数返回null
。null
,因此PHP将null
连接到前一个字符串(保持不变)。echo
中的字符串现已完成,echo
已准备好返回。它将字符串发送到输出缓冲区。答案 4 :(得分:1)
表达式与执行顺序。
您的echo "string" . get()
会导致以下执行流程: