В чем разница между PHP echo и PHP return на простом английском языке? - PullRequest
38 голосов
/ 22 февраля 2012

Да, я погуглил этот вопрос и даже сослался на свой учебник (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 ]

105 голосов
/ 22 февраля 2012

Я собираюсь дать совершенно нетехнический ответ на этот вопрос.

Допустим, есть девушка по имени Салли Функ. Вы хотите знать, нравится ли вам она или нет. Таким образом, поскольку вы учитесь в начальной школе, вы решаете передать Салли записку (вызвать функцию с параметрами), спрашивающую ее, нравитесь ли вы ей или нет. Теперь вы планируете спросить ее об этом, а затем рассказать всем, что она вам говорит. Вместо этого вы спрашиваете ее, а затем она рассказывает всем. Это равносильно возвращению (вы получаете информацию и что-то делаете с ней) против ее эхо (сообщая всем без вашего контроля).

В вашем случае происходит то, что, когда Салли echo s, она забирает у вас контроль и говорит: «Я собираюсь рассказать людям об этом прямо сейчас» вместо того, чтобы вы могли принять ее ответ и делать то, что Вы хотели сделать с этим. Конечный результат, однако, заключается в том, что вы говорите людям в то же время, так как вы повторяете то, что она уже повторила, но не вернула (она оборвала вас в середине вы , сказав вашему классу, что если понравилась она тебе или нет)

43 голосов
/ 22 февраля 2012

Примите во внимание следующее:

<?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" выводится (записывается) как вывод, как только вызывается функция.«Hello», с другой стороны, возвращается в переменную $hello.$goodbye на самом деле пусто, так как функция до свидания ничего не возвращает.

23 голосов
/ 28 марта 2014

Я вижу, что вы по-прежнему публикуете комментарии, которые предполагают, что вы сбиты с толку, потому что вы не понимаете поток кода.Возможно, это поможет вам (особенно с ответом Матиаса Р. Джессена ).

Так что возьмите эти две функции снова:

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.
6 голосов
/ 22 февраля 2012

с return сама функция может рассматриваться как переменная.

Итак,

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

выведет:

25

, а

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

выведет:

5
20
0

Поскольку нет result из add2.То, что он делает, - это только эхоНикогда не возвращайте значение обратно к коду, который его вызвал.

Кстати, вы не глупы.Вы только начинающий.Мы все новички в начале, и есть определенный порог, который вам нужно преодолеть в начале.Возможно, в начале у вас будет много «глупых» вопросов, но продолжайте пытаться и, прежде всего, эксперимент , и вы научитесь.

5 голосов
/ 22 ноября 2015

Итак, в основном вы захотите использовать echo всякий раз, когда вы хотите что-то вывести в браузер, и использовать return, когда хотите завершить скрипт или функцию и передать данные в другую часть вашего скрипта.

4 голосов
/ 10 марта 2015

Разница между ответом функции заключается в том, что «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 .
4 голосов
/ 01 октября 2014

есть пара различий, которые я обнаружил после тестирования

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

}

3 голосов
/ 22 февраля 2012

Используя небольшую модификацию вашего примера:

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

?>

Видите ли вы разницу?

3 голосов
/ 22 февраля 2012

echo выводит текст и т. Д. В документ, return возвращает данные из функции / метода и т. Д. В любой вызывающий их объект.Если вы получаете возврат, он будет отображать его (при условии, что это текст / число и т. Д., А не объект и т. Д.).

2 голосов
/ 22 февраля 2012

За обеими функциями имеется строка, которая переключает ваш вывод:

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