Подтвердить что ты не робот

В чем разница между 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>";

?>

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Рассмотрим следующее:

<?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 фактически пуст, так как функция прощания ничего не возвращает.

Ответ 3

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

Итак, повторите эти две функции:

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.

Ответ 4

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

So

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

выведет:

25

а

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

выведет:

5
20
0

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

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

Ответ 5

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

Ответ 6

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

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

}

Ответ 7

Разница между ответом функции заключается в том, что "эхо" отправляет что-то в браузер (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 .

Ответ 8

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

Ответ 9

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

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

?>

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

Ответ 10

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

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;

Ответ 11

В принципе, для вывода 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 нам не нужно его эхо-эхо, потому что мы эхо его внутри функции.

Ответ 12

Одна вещь, которую я узнал при выполнении изменений в Buddypress, заключается в том, что она использует возврат в основном на вложенные основные функции, а затем с помощью sprintf он связывает динамические переменные в HTML и возвращает этот chunck html обратно к основной функции, он был вызван, и только тогда он повторяется один раз при основной функции. Таким образом, код становится модульным и легче отлаживается.

Ответ 13

Самое важное отличие между 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(), чтобы понять, что я имел в виду.

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

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