PHP的回声和简单的英文的PHP返回之间有什么区别?

是的,我已经使用了这个问题,甚至提到我的教科书(Don Gosselin的PHP),但是我认真地理解了这个解释。

从我的理解:

echo =显示函数的最终结果

返回=返回一个函数的值

我在下面的函数中同时应用了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>"; ?> 

都显示结果! 我不了解什么?

我要给这个完全不是技术性的答案。

假设有一个叫莎莉function的女孩。 你想知道她是否喜欢你。 所以既然你是在小学的时候,你决定把Sally的一个音符(用参数调用函数)询问她是否喜欢你。 现在你要做的就是问问她,然后告诉大家她告诉你什么。 相反,你问她,然后告诉每个人。 这相当于返回(你得到的信息和做的事情)与她的回声(告诉每个人没有任何控制权)。

在你的情况下,发生的事情是,当萨莉echo她正在控制你,并说:“我现在要告诉别人”,而不是你能够采取她的回应,做你想做的事情它。 然而,最终的结果是,你同时告诉别人,因为你回应了她已经回应的东西,但没有回来(如果她喜欢你,她在你的课堂上告诉你的class级的时候,

考虑以下几点:

 <?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”会返回到$hellovariables。 $goodbye实际上是空的,因为再见function不返回任何东西。

我看到你正在发表评论仍然表明你很困惑,因为你不明白代码的stream程。 也许这会帮助你(特别是Mathias R. Jessen的回答 )。

所以再次采取这两个function:

 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. 

returnfunction本身可以被视为有点像一个variables。

所以

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

会输出:

 25 

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

会输出:

 5 20 0 

由于没有add2的result 。 它所做的只是回应东西。 切勿将值返回给调用它的代码。

顺便说一句,你不笨。 你只是一个初学者。 一开始我们都是初学者,开始时需要一定的门槛。 一开始你可能会有很多“哑巴”的问题,但是继续尝试,最重要的是实验 ,你会学到的。

所以,基本上你会想要使用echo来输出一些东西给浏览器,当你想结束脚本或函数并把数据传递到脚本的另一部分时使用return。

我testing后发现有一些差异

1)return只是返回一个函数的值,以便在将其存储在一个variables中之后使用,但在您调用该函数时仅回显该值,并不返回任何内容。

这是这个简短的例子

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"; 

}

一个函数的响应之间的差异是“回声”发送一些东西给浏览器(DOM),而“返回”返回的东西给调用者。

 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 . 

对你的例子稍作修改:

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

你能看出差异吗?

echo呈现文本等文件, return返回数据从一个函数/方法等任何调用它。 如果你回应一个回报,它会渲染它(假设它是文本/数字等 – 不是一个对象等)。

在这两个函数的后面,你有一条线,它切换你的输出:

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

echo打印的价值,所以你可以阅读它。 return返回值保存在例如variables。

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

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

下面的这两个例子会给出一个清晰的认识:

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

在每个示例中显示$结果html:

对于示例1,我们应该使用<?php echo $result ?>

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

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

我在学习Buddypress的时候学到了一件事,那就是它主要使用嵌套的核心函数返回,然后使用sprintf将dynamicvariables绑定到HTML中,然后将html的chunck返回到被调用的主函数只有在主function中才会回显一次。 通过这样做,代码变得模块化并且更易于debugging。

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

 <?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数据types。
另一方面,在echo情况下,我们将打印secondFunction($value)作为NULL数据types。
你可以尝试用var_dump()函数打印每一个函数来理解我的意思。

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

当我们处理从数据库返回的一些值时,这种差异将会使我们受益,特别是在math运算(如后期视图计数)或类似的事情中。
这对于这里所写的内容是有意义的。
希望我能以简单的方式解释它。