用简单的英语将PHP echo和PHP返回有什么区别?

时间:2012-02-22 01:03:25

标签: php function return echo

是的,我搜索了这个问题,甚至提到了我的教科书(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>";

?>

两者都显示结果! 我不理解的是什么?

13 个答案:

答案 0 :(得分:103)

我将在这个问题上给出一个完全非技术性的答案。

假设有一个叫Sally Function的女孩。你想知道她是否喜欢你。因此,既然你在小学,你决定给Sally一个音符(用参数调用函数),询问她是否喜欢你。现在你打算做的就是问她这个,然后告诉大家她告诉你什么。相反,你问她,然后告诉所有人。这相当于返回(你获取信息并用它做某事)与她的回声(告诉所有人,而你没有任何控制)。

在你的情况下发生的事情是,当莎莉echo她正在控制你并且说“我现在要告诉别人这个”,而不是你能够接受她的反应和做你想做的事。然而,最终的结果是,你在同时告诉人们,因为你回应了她已经回应但却没有回复的东西(她在告诉你的班级的过程中切断了你如果她喜欢你或不喜欢你)

答案 1 :(得分:43)

请考虑以下事项:

<?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

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

答案 2 :(得分:23)

我发现您发布的评论仍然表明您感到困惑,因为您不了解代码的流程。也许这会对你有所帮助(尤其是对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.

答案 3 :(得分:6)

return函数本身可以被视为变量。

所以

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

将输出:

25

,而

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

将输出:

5
20
0

因为add2没有result。它的作用只是回应出来的东西。切勿将值实际返回给调用它的代码。

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

答案 4 :(得分:5)

所以,基本上你想要在浏览器输出内容时使用echo,并在想要结束脚本或函数时使用return,并将数据传递给脚本的另一部分。

答案 5 :(得分:4)

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

1)返回只返回一个函数的值,以便在将它存储在变量中之后使用它,但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"; 

}

答案 6 :(得分:4)

函数响应之间的区别在于“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 .

答案 7 :(得分:3)

echo将文本等呈现到文档中,return将函数/方法等数据返回到调用它的任何内容。如果你回复一个回复,它将呈现它(假设它是文本/数字等 - 而不是对象等)。

答案 8 :(得分:3)

稍微修改一下您的示例:

<?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?

答案 9 :(得分:2)

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

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;

答案 10 :(得分:1)

基本上,要将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,我们应该使用<?php echo $result ?>

对于样本2,我们应该使用<?php $result ?>

在样本2上,我们不需要回显它,因为我们在函数内部回显它。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

我的观点中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));

当我们处理从数据库返回的某些值时,这种差异将使我们受益,尤其是在数学运算中,例如(发布视图计数)或类似的事情。
这对于这里写的内容有意义 希望我以简单的方式解释它。