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 = 从函数返回值
我在以下函数中同时应用了echo
和return
,我看不出使用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 echo
s 从你手中夺走控制权并说“我现在要告诉人们这件事”时,你无法接受她的回应并采取行动你想用它做。然而,最终结果是,你同时告诉别人,因为你在重复她已经回应但没有回复的内容(她在 你 告诉你的班级时打断了你她喜不喜欢你)
【讨论】:
您的解释再简单不过了!虽然我仍然很难理解为什么我不能在函数中回显然后回显函数,但由于您的类比,我确实了解回显和返回之间的幕后情况:D 考虑是否要将结果保存在变量中以便以后使用。如果你的函数是echo
s 而不是return
ing,那么你实际上并没有得到任何东西来保存在变量中。
哦,我明白了!!!!我想我终于明白了:-D ...现在我只需要知道为什么echo
和return
的结果可能会不同,哈哈(请参阅下面@Aron Cederholm 的帖子)非常感谢 jprofitt — 我很感激你的帮助!
在 php 函数中使用 echo
或 return
的更好的编程实践是什么?什么更安全?【参考方案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,我们应该使用 <?php echo $result ?>
对于示例 2,我们应该使用 <?php $result ?>
在示例 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】:在我看来,echo
和 return
之间最重要的区别是:
每个结果的数据类型。
当我们编写如下函数时:
<?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 解析错误