在函数中使用'echo'时,为什么结果会出现在上一行?
问题描述:
我写了一个函数,它在链接表的其他位置回显了id。这调用了function--在函数中使用'echo'时,为什么结果会出现在上一行?
echo "<br/>getalbumartistfunction: ".get_albumartistid($thisalbum);
当我在页面写返回上面在那里我有一个函数调用行的artist_id数。 所以我进入了函数,并将其从'echo'切换到'return',现在它就像我期望的那样在冒号后面出现(并且可能更符合我需要的内容)。
因此,它的工作原理。但是我非常困惑,为什么当函数设置为回显它时,它会在前一行显示结果。
答
在get_albumartistid回声立即执行时,而回声“
......”呼应前组装字符串函数被调用 - 本质上缓冲了整个事情呼应之前。返回而不是回声是处理这种情况的正确方法,因为这将有效地用返回的字符串替换函数调用。如果你使用呼应你必须:
echo "<br/>getalbumartistfunction: ";
get_albumartistid($thisalbum);
有效地变为:
echo "<br/>getalbumartistfunction: ";
echo "<The artist id>";
在你原来的例子,执行的顺序使得:
echo "<The artist id>";
echo "<br/>getalbumartistfunction: ";
由于所有回声在调用时立即发生,而PHP没有完成缓冲外部回声语句。
答
由于在调用echo
之前需要知道echo
的参数,因此之前会调用功能get_albumartistid
。因此函数内部的任何声明也被称为echo
之前。这就是为什么功能内的echo
会在功能外的echo
之前输出数据。
答
因为get_albumartistid
函数是在整个回声输出之前计算的,也就是get_albumartistid
内的回声在echo "<br/>getalbumartistfunction: "
之前执行。
答
echo
将内容直接发送到输出缓冲区。当你有echo
语句的功能,这是发生了什么:
- PHP遇到外
echo
声明。它开始构建要发送到输出缓冲区的字符串。它看到的第一件事是字符串"<br/>getalbumartistfunction: "
。接下来的事情,连接到前一个字符串,是对函数get_albumartistid()
的调用。它需要评估此函数调用以完成评估级联,所以... - PHP执行函数
get_albumartistid()
。该函数包含一个echo
声明。语句echo
的内容被发送到输出缓冲区。该函数返回null
。 - 函数返回
null
,所以PHP连接null
到以前的字符串(保持不变)。 - 外部
echo
中的字符串现在已完成,并且echo
已准备好返回。它将字符串发送到输出缓冲区。
答
表达式与执行顺序。
你echo "string" . get()
导致下面的执行流程:
- PHP结合下面的回声表达。回声无法执行。
- 串联中的第一个字符串是静态的。
- 要获得第二个字符串,需要调用该函数。当功能做了任何有趣的事情(使屁噪音或打印出来的东西),它现在就做到了。
- 两个字符串部分组合成一个新的临时字符串。
- 现在只能回显输出的所有内容。
因为在整个字符串被组装之前显然会调用这个函数。 – 2010-12-12 15:43:49
@Eineki你只需要更多的知识。 – 2010-12-12 15:44:19
达蒙,想象一下你的口袋里有些钱,还有一些钱包里有钱。为了买东西,你需要两个人的钱。但是每次你拿钱包,你都直接把钱给推销员。所以,*在你从口袋和钱包里收钱之前,你已经把钱从钱包里拿走了。这就是为什么人们不应该**从函数中回应任何东西,除非它是特殊的输出函数。 – 2010-12-12 15:48:29