【问题标题】:What is the difference between PHP echo and PHP return in plain English?PHP echo 和 PHP return 用纯英语有什么区别?
【发布时间】:2012-03-12 08:46:49
【问题描述】:

是的,我已经用谷歌搜索了这个问题,甚至参考了我的教科书(Don Gosselin 的 PHP),但我似乎真的无法理解其中的解释。

据我了解:

echo = 显示函数的最终结果

return = 从函数返回值

我在以下函数中同时应用了echoreturn,我看不出使用return 而不是echo 的区别或“有效性”。

<?php
echo "<h1 style='font-family:Helvetica; color:red'>Using <em>echo</em></h1>";
function add1($x, $y){
    $total = $x + $y;
    echo $total;
}
echo "<p>2 + 2 = ", add1(2, 2), "</p>";

echo "<h1 style='font-family:Helvetica; color:red'>Using <em>return</em></h1>";
function add2($x, $y){
    $total = $x + $y;
    return $total;
}
echo "<p>2 + 2 = ", add2(2, 2), "</p>";

?>

两者都显示结果! 我不明白什么?

【问题讨论】:

  • 我认为echo的定义是Output one or more strings,这个定义本身就很清楚了来源:php.net/manual/en/function.echo.php
  • 我一直认为“return”语句是一种导出数据以便重复使用的方法。返回的数据以其“原始”格式交付。至于“echo”,数据总是一个字符串(偶数),因为它的目标是只接受字符串值的计算机显示器(或屏幕)。

标签: php function return echo


【解决方案1】:

echo 将文本等呈现到文档中,return 将数据从函数/方法等返回到调用它的任何对象。如果您回显返回,它将呈现它(假设它是文本/数字等 - 不是对象等)。

【讨论】:

    【解决方案2】:

    对您的示例稍作修改:

    <?php
    
    echo "<h1 style='font-family:Helvetica; color:red'>Using <em>echo</em></h1>";
    
    function add1($x, $y){
        $total = $x + $y;
        echo $total;
    }
    
    $result = add1(2, 2);
    
    echo "<p>2 + 2 = ", $result, "</p>";
    
    echo "<h1 style='font-family:Helvetica; color:red'>Using <em>return</em></h1>";
    
    function add2($x, $y){
        $total = $x + $y;
        return $total;
    }
    
    $result = add2(2, 2);
    
    echo "<p>2 + 2 = ", $result, "</p>";
    
    ?>
    

    Can you see the difference?

    【讨论】:

      【解决方案3】:

      在这两个函数后面都有一行,用于切换输出:

      echo "<p>2 + 2 = ", add1(2, 2), "</p>";
      echo "<p>2 + 2 = ", add2(2, 2), "</p>";
      

      echo 打印该值以便您阅读。 return 返回要保存在例如变量中的值。

      $result = add2(2, 2);
      // do more with result ... ?
      // output the result
      echo $result;
      

      【讨论】:

        【解决方案4】:

        使用return 可以将函数本身视为变量。

        所以

        return add1(2, 3) + add1(10, 10);
        

        将输出:

        25
        

        同时

        echo add2(2, 3) + add2(10, 10);
        

        将输出:

        5
        20
        0
        

        因为add2 没有result。它所做的只是回显一些东西。永远不会真正将值返回给调用它的代码。

        顺便说一句,你不傻。你只是一个初学者。一开始我们都是初学者,一开始你需要克服一定的门槛。一开始你可能会遇到很多“愚蠢”的问题,但只要继续尝试,最重要的是实验,你就会学到东西。

        【讨论】:

        • 我知道这里发生了什么,但不知道“为什么”!我的意思是,为什么在第一种情况下它正在添加结果但第二个没有:-S
        • 函数很像魔术盒。您在其中放入一些东西(参数)并拉动杠杆,然后会发生某些事情或返回某些内容。例如。你把一个苹果放在一个黑盒子里,然后按开始。在听到很多声音和噪音之后,盒子突然在地上种了一棵苹果树,它立刻长成了全尺寸。这就是黑盒/功能所执行的。但是当你打开盒子时,没有剩下一个苹果,只有一个苹果块。这是函数返回的内容。
        • 现在,考虑 add1 和 add2。 Add1 是一个黑色盒子,前面有两个输入托盘。在第一个托盘里,你放了一个巨大的苹果笼,你数不清。在第二个托盘中,你放了另一个巨大的苹果笼,数量也太多了。当您按下开始键时,您会听到一些声音,从盒子的背面出现一个装有所有苹果的笼子(总共 91.218 个苹果)。
        • 然后您将另外两个苹果笼放入 add2 黑盒的进料盘中。有很多声音,然后黑匣子里什么也没有。取而代之的是,黑匣子会产生一只手臂,在附近的白板上写下“91.218”。
        • 现在考虑你真的是电脑。你是一个盲人机器人,只会做你被告知要做的事情。在第一个示例中,您可以简单地取出生成的苹果笼并数一数,您会立即知道(因为您的速度如此之快)笼子里有 91.218 个苹果。但在另一个例子中,你没有得到回笼,而且你是盲人,你真的不知道黑盒子在白板上写了什么。
        【解决方案5】:

        考虑以下几点:

        <?php
        function sayHelloLater(){
            return "Hello";
        }
        
        function sayGoodbyeNow(){
            echo "Goodbye";
        }
        
        $hello = sayHelloLater(); // "Hello" returned and stored in $hello 
        $goodbye = sayGoodbyeNow(); // "Goodbye" is echo'ed and nothing is returned
        
        echo $hello; // "Hello" is echo'ed
        echo $goodbye; // nothing is echo'ed
        ?>
        

        你可能期望输出是:

        HelloGoodbye
        

        实际输出为:

        GoodbyeHello
        

        原因是,只要调用函数,“再见”就会被回显(写入)作为输出。另一方面,“Hello”返回给$hello 变量。 $goodbye 实际上是空的,因为 goodbye 函数不返回任何内容。

        【讨论】:

          【解决方案6】:

          我将就此给出一个完全非技术性的答案。

          假设有一个名叫 Sally Function 的女孩。你想知道她喜不喜欢你。所以,既然你在上小学,你决定给 Sally 一个便条(用参数调用函数),询问她是否喜欢你。现在你打算做的是问她这个,然后告诉每个人她告诉你什么。相反,你问她,然后 告诉每个人。这相当于返回(您获取信息并用它做某事)与她的回应(在您无法控制的情况下告诉所有人)。

          在你的情况下,当 Sally echos 从你手中夺走控制权并说“我现在要告诉人们这件事”时,你无法接受她的回应并采取行动你想用它做。然而,最终结果是,你同时告诉别人,因为你在重复她已经回应但没有回复的内容(她在 告诉你的班级时打断了你她喜不喜欢你)

          【讨论】:

          • 您的解释再简单不过了!虽然我仍然很难理解为什么我不能在函数中回显然后回显函数,但由于您的类比,我确实了解回显和返回之间的幕后情况:D
          • 考虑是否要将结果保存在变量中以便以后使用。如果你的函数是echos 而不是returning,那么你实际上并没有得到任何东西来保存在变量中。
          • 哦,我明白了!!!!我想我终于明白了:-D ...现在我只需要知道为什么echoreturn 的结果可能会不同,哈哈(请参阅下面@Aron Cederholm 的帖子)非常感谢 jprofitt — 我很感激你的帮助!
          • 在 php 函数中使用 echoreturn 的更好的编程实践是什么?什么更安全?
          【解决方案7】:

          我看到您仍在发布 cmets,这表明您很困惑,因为您不了解代码的流程。也许这会对您有所帮助(尤其是 Mathias R. Jessen's answer)。

          所以再取这两个函数:

          function sayHelloLater() {
              return 'Hello';
          }
          
          function sayGoodbyeNow() {
              echo 'Goodbye';
          }
          

          现在如果你这样做:

          $hello = sayHelloLater();
          $goodbye = sayGoodbyeNow();
          
          echo $hello;
          echo $goodbye;
          

          屏幕上会留下“GoodbyeHello”。

          原因如下。代码会这样运行:

          $hello = sayHelloLater();  ---->-------->-------->------->------>--
                                                                            ¦
            ¦           ^                                                   ¦
            ¦           ¦                                           Call the function
            v           ¦                                                   ¦
            ¦           ^                                                   ¦
            ¦           ¦                                                   v
            ¦
            v         "return" simply sends back                 function sayHelloLater() {
            ¦          'Hello' to wherever the     <----<----        return 'Hello';
            ¦             function was called.                   }
            v           Nothing was printed out
            ¦          (echoed) to the screen yet.
            ¦
            v
          
          $hello variable now has whatever value
          the sayHelloLater() function returned,
          so $hello = 'Hello', and is stored for
          whenever you want to use it.
          
            ¦
            ¦
            v
            ¦
            ¦
            v
          
          $goodbye = sayGoodbyeNow();  ---->-------->-------->------->------
                                                                           ¦
            ¦              ^                                               ¦
            ¦              ¦                                       Call the function
            v              ¦                                               ¦
            ¦              ^                                               ¦
            ¦              ¦                                               v
            ¦              ¦
            v              ¦                                    function sayGoodbyeNow() {
            ¦                                                       echo 'Goodbye';
            ¦        The function didn't return                 }
            ¦        anything, but it already
            v         printed out 'Goodbye'                                ¦
            ¦                                                              v
            ¦           ^
            ¦           ¦                                    "echo" actually prints out
            v           <-----------<-----------<---------     the word 'Goodbye' to
            ¦                                                 the page immediately at
            ¦                                                       this point.
            ¦
            v
          
          Because the function sayGoodbyeNow() didn't
          return anything, the $goodbye variable has
          a value of nothing (null) as well.
          
            ¦
            ¦
            ¦
            v
            ¦
            ¦
            ¦
            v
          
          echo $hello;  -------->------->   Prints 'Hello' to the screen at
                                            this point. So now your screen says
            ¦                               'GoodbyeHello' because 'Goodbye' was
            ¦                               already echoed earlier when you called
            ¦                               the sayGoodbyeNow() function.
            v
          
          echo $goodbye;  ------>------->   This variable is null, remember? So it
                                            echoes nothing.
            ¦
            ¦
            ¦
            v
          
          And now your code is finished and you're left with
          'GoodbyeHello' on your screen, even though you echoed
          $hello first, then $goodbye.
          

          【讨论】:

          • 谢谢解释清楚
          【解决方案8】:

          我在测试后发现了一些差异

          1) return 只返回一个函数的值,以便在将其存储在变量中之后使用它,但 echo 只是在调用函数时打印该值并且不返回任何内容。

          这是一个简短的例子

          function myfunc() { echo "i am a born programmer"; }

          $value = myfunc(); \\ it is going to print the 'i am a born programmer' as function would be called
          
          if(empty($value)===true)  {
            echo "variable is empty because function returns nothing"; 
          

          }

          【讨论】:

            【解决方案9】:

            基本上,要将 PHP 输出为 HTML,我们应该使用 echo。换句话说,我们需要回应它。

            下面这两个例子会让你清楚地理解:

            function myfunction() {
            // script content here, and sample out maybe like this :
            
            return $result; ---> sample 1
            echo $result;   ---> sample 2
            
            }
            

            在 html 中显示每个样本的 $result :

            对于示例 1,我们应该使用 &lt;?php echo $result ?&gt;

            对于示例 2,我们应该使用 &lt;?php $result ?&gt;

            在示例 2 上,我们不需要回显它,因为我们已经在函数内部回显它。

            【讨论】:

              【解决方案10】:

              函数响应的区别在于“echo”向浏览器(DOM)发送一些东西,而“return”向调用者返回一些东西。

              function myFunction(
                  return 5;
              }
              
              $myVar= myFunction(); //myVar equals 5
              echo $myVar; // will show a "5 " on the screen
              
              
              function myFunction() {
                  echo 5;
              }
              
              $myVar= myFunction(); // myVar equals 0, but the screen gets a "5"
              echo $myVar; // a zero on the screen next to "5" printed by function appears .
              

              【讨论】:

              • 非常简单但又非常准确的答案
              【解决方案11】:

              因此,基本上,当您想向浏览器输出某些内容时,您需要使用 echo,而当您想要结束脚本或函数并将数据传递到脚本的另一部分时,您需要使用 return。

              【讨论】:

              • 这没有提供问题的答案。
              【解决方案12】:

              我在 Buddypress 中进行更改时学到的一件事是,它主要在嵌套的核心函数上使用 return,然后使用 sprintf 将动态变量绑定到 HTML 并将该 html 块返回给主函数它被调用,然后它才在主函数中回显一次。通过这样做,代码变得模块化并且更易于调试。

              【讨论】:

                【解决方案13】:

                在我看来,echoreturn 之间最重要的区别是:
                每个结果的数据类型。
                当我们编写如下函数时:

                <?php
                    $value = 150;
                
                    function firstFunction($value) {
                        return $value + 1;
                    }
                    echo firstFunction($value) . '<br />';
                
                    function secondFunction($value) {
                        echo $value + 1;
                    }
                    secondFunction($value);
                

                是的,它们都会给我们 151 作为输出值。
                但是,在return 的情况下,我们会将firstFunction($value) 打印为int 数据类型。
                另一方面,在 echo 的情况下,我们会将 secondFunction($value) 打印为 NULL 数据类型。
                您可以尝试使用var_dump() 函数打印每一个以理解我的意思。

                <?php
                    var_dump(firstFunction($value)); ?>
                    <br />
                <?php
                    var_dump(secondFunction($value));
                

                当我们处理从数据库返回的一些值时,这种差异将使我们受益,尤其是在数学运算中,如(帖子浏览次数)或类似的东西。
                这将比这里写的更有意义。
                希望我已经用简单的方法进行了解释。

                【讨论】:

                  猜你喜欢
                  • 2022-12-13
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-12-11
                  • 1970-01-01
                  • 2019-01-16
                  • 2014-05-24
                  • 1970-01-01
                  相关资源
                  最近更新 更多