PHP的回声和简单的英文的PHP返回之间有什么区别?
是的,我已经使用了这个问题,甚至提到我的教科书(Don Gosselin的PHP),但是我认真地理解了这个解释。
从我的理解:
echo =显示函数的最终结果
返回=返回一个函数的值
我在下面的函数中同时应用了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>"; ?>
都显示结果! 我不了解什么?
我要给这个完全不是技术性的答案。
假设有一个叫莎莉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”会返回到$hello
variables。 $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.
与return
function本身可以被视为有点像一个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。
在我看来, echo
与return
之间最重要的区别是:
每个结果的数据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运算(如后期视图计数)或类似的事情中。
这对于这里所写的内容是有意义的。
希望我能以简单的方式解释它。