В чем разница между PHP echo и PHP возвратом на простом английском языке?

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

    Оба отображают результат! Что я не понимаю?

    Related of "В чем разница между PHP echo и PHP возвратом на простом английском языке?"

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

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

    В вашем случае то, что происходит, – это то, что когда Салли 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» вызывается (записывается) как результат, как только вызывается функция. «Привет», с другой стороны, возвращается к переменной $hello . $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 нет. То, что он делает, это только эхо-звук. Никогда не возвращал значение обратно коду, который его вызывал.

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

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

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

    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 отображает текст и т. д. в документ, 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 и возвращает этот chunck 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 .
    Вы можете попробовать распечатать каждый с var_dump() функции var_dump() чтобы понять, что я имел в виду.

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

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