【问题标题】:when using 'echo' in function, why does result appear on previous line?在函数中使用'echo'时,为什么结果会出现在上一行?
【发布时间】:2010-12-12 15:37:21
【问题描述】:

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

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

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

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

所以它起作用了。但是我非常困惑为什么当函数设置为回显时它会在上一行显示结果。

【问题讨论】:

  • 因为这个函数显然是在整个字符串组装之前被调用的。
  • @Eineki 你只需要更多的知识。
  • Damon,想象一下你的口袋里有一些钱,钱包里有一些。要买东西,你需要双方的钱。但是每次你拿钱包时,你都是直接把钱给了推销员。所以,你从口袋和钱包里收钱之前,你已经把钱从钱包里拿出来了。这就是为什么应该从不从函数中回显任何内容,除非它是特殊的输出函数。

标签: php function return-value echo


【解决方案1】:

get_albumartistid 中的回显在函数被调用时立即执行,而回显“
...”在回显之前组装字符串 - 实质上是在回显之前缓冲整个内容。 Return 而不是 echo 是处理此问题的正确方法,因为这将有效地用返回的字符串替换函数调用。如果你要使用 echo 你必须:

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

实际上变成:

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

在你原来的例子中,执行顺序是这样的:

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

因为所有回显在调用时立即发生,并且 PHP 没有完成对外部回显语句的缓冲。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      因为get_albumartistid函数在整个echo输出之前被求值,即get_albumartistid内部的echo在echo "&lt;br/&gt;getalbumartistfunction: "之前执行。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          表达式与执行顺序。

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

          • PHP 结合了 echo 后面的表达式。还不能执行回显。
          • 连接中的第一个字符串是静态的。
          • 要获取第二个字符串,需要调用该函数。当函数做了一些有趣的事情(放屁或打印出来)时,它会立即这样做。
          • 两个字符串部分组合成一个新的临时字符串。
          • 只有现在才能回显输出所有内容。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-24
            相关资源
            最近更新 更多