2010-12-12 125 views
0

我写了一个函数,它在链接表的其他位置回显了id。这调用了function--在函数中使用'echo'时,为什么结果会出现在上一行?

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

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

因此,它的工作原理。但是我非常困惑,为什么当函数设置为回显它时,它会在前一行显示结果。

+0

因为在整个字符串被组装之前显然会调用这个函数。 – 2010-12-12 15:43:49

+1

@Eineki你只需要更多的知识。 – 2010-12-12 15:44:19

+1

达蒙,想象一下你的口袋里有些钱,还有一些钱包里有钱。为了买东西,你需要两个人的钱。但是每次你拿钱包,你都直接把钱给推销员。所以,*在你从口袋和钱包里收钱之前,你已经把钱从钱包里拿走了。这就是为什么人们不应该**从函数中回应任何东西,除非它是特殊的输出函数。 – 2010-12-12 15:48:29

回答

2

在get_albumartistid回声立即执行时,而回声“
......”呼应前组装字符串函数被调用 - 本质上缓冲了整个事情呼应之前。返回而不是回声是处理这种情况的正确方法,因为这将有效地用返回的字符串替换函数调用。如果你使用呼应你必须:

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

有效地变为:

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

在你原来的例子,执行的顺序使得:

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

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

1

由于在调用echo之前需要知道echo的参数,因此之前会调用功能get_albumartistid。因此函数内部的任何声明也被称为echo之前。这就是为什么功能内的echo会在功能外的echo之前输出数据。

1

因为get_albumartistid函数是在整个回声输出之前计算的,也就是get_albumartistid内的回声在echo "<br/>getalbumartistfunction: "之前执行。

1

echo将内容直接发送到输出缓冲区。当你有echo语句的功能,这是发生了什么:

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

表达式与执行顺序。

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

  • PHP结合下面的回声表达。回声无法执行。
  • 串联中的第一个字符串是静态的。
  • 要获得第二个字符串,需要调用该函数。当功能做了任何有趣的事情(使屁噪音或打印出来的东西),它现在就做到了。
  • 两个字符串部分组合成一个新的临时字符串。
  • 现在只能回显输出的所有内容。
相关问题