В чем разница между PHP echo и PHP return на простом английском языке?
Да, я погуглил этот вопрос и даже сослался на свой учебник (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>";
?>
оба отображают результат! Чего я не понимаю?
13 ответов
Я собираюсь дать совершенно нетехнический ответ на этот вопрос.
предположим, что есть девушка по имени Салли функция. Ты хочешь знать, нравишься ты ей или нет. Поэтому, поскольку вы в начальной школе, вы решаете передать Салли записку (вызовите функцию с параметрами), спрашивая ее, нравитесь ли вы ей или нет. Теперь ты планируешь спросить ее об этом, а потом рассказать всем, что она скажет тебе. Вместо этого, вы спрашиваете ее, а потом Она рассказывает всем. Это эквивалентно возвращению (вы получаете информацию и делаете что-то с ней) против ее Эха (рассказывая всем без какого-либо контроля).
в вашем случае происходит то, что когда Салли echo
Она берет у вас контроль и говорит:" Я собираюсь рассказать людям об этом прямо сейчас", вместо того, чтобы вы могли принять ее ответ и сделать то, что вы хотели с ним сделать. Конечный результат, однако, в том, что вы говорили людям в то же время, так как вы эхом то, что она уже повторила, но не вернула (она прервала вас на середине вы говоря вашему классу, нравитесь вы ей или нет)
рассмотрим следующее:
<?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 " является echo'Ed (написанным) как выход, как только функция вызывается. "Привет", с другой стороны, возвращается $hello
переменной. the $goodbye
фактически пуст, так как функция goodbye ничего не возвращает.
Я вижу, что вы публикуете комментарии, которые предполагают, что вы смущены, потому что вы не понимаете поток кода. Возможно, это поможет вам (особенно с ответ Матиаса Р. Ессена).
так возьмите эти две функции снова:
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
сама функция может рассматриваться как переменная.
так
return add1(2, 3) + add1(10, 10);
вывод:
25
пока
echo add2(2, 3) + add2(10, 10);
вывод:
5
20
0
а не result
из add2. То, что он делает, - это только эхо. Никогда не возвращает значение обратно в код, который его вызвал.
Кстати, ты не тупой. Ты всего лишь новичок. Мы все новички в начале, и существует определенный порог, который вам нужно будет преодолеть в начале. У вас, вероятно, будет много "глупых" вопросов в начале, но просто продолжайте пытаться и прежде всего эксперимент, и вы узнаете.
Итак, в основном вы захотите использовать echo всякий раз, когда вы хотите вывести что-то в браузер, и использовать return, когда вы хотите завершить сценарий или функцию и передать данные в другую часть вашего сценария.
есть пара различий, которые я нашел после тестирования его
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";
}
разница между ответом функции заключается в том , что" Эхо "отправляет что-то в браузер (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
отображает текст etc в документ,return
возвращает данные из функции / метода и т. д. К тому, что называется. Если вы повторите возврат, он отобразит его (предполагая, что это текст/номер и т. д. - Не объект и т. д.).
за обеими функциями у вас есть строка, которая переключает ваш выход:
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;
В принципе, для вывода PHP в HTML мы должны использовать echo. Другими словами, нам нужно Эхо.
эти два примера ниже дадут четкое понимание:
function myfunction() {
// script content here, and sample out maybe like this :
return $result; ---> sample 1
echo $result; ---> sample 2
}
чтобы показать $result в html для каждого образца:
для примера 1 мы должны использовать <?php echo $result ?>
для образца 2 мы должны использовать <?php $result ?>
на примере 2 нам не нужно Эхо, потому что у нас есть эхо внутри функции.
одна вещь, которую я узнал, делая изменения в Buddypress, заключается в том, что он использует возврат в основном на вложенные основные функции, а затем с использованием sprintf он связывает динамические переменные в HTML и возвращает этот фрагмент html обратно в основную функцию, где он был вызван, и только тогда он Эхо один раз в основной функции. При этом код становится модульным и его легче отлаживать.
самая важная разница между 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
сведения тип.
Вы можете попробовать распечатать каждый из них с помощью