PHP echo 和 PHP return 用纯英语有啥区别?

Posted

技术标签:

【中文标题】PHP echo 和 PHP return 用纯英语有啥区别?【英文标题】: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”,数据总是一个字符串(偶数),因为它的目标是只接受字符串值的计算机显示器(或屏幕)。 【参考方案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));

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

【讨论】:

以上是关于PHP echo 和 PHP return 用纯英语有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

就jQuery ajax调用而言,php echo和return之间的区别[关闭]

iOS:在 PHP 服务文件中使用 return 而不是 echo 时出现 JSON 解析错误

php函数function中return问题:

第九篇 - 流程控制

PHP中return 和 exit break和contiue 区别与用法

php设计api,只能以echo的形式返回给调用者吗?为啥用return就不能返回数据呢?