Как вернуть несколько значений из функции класса в php? [Дубликат]

Mhh, вы можете использовать функцию -конструктор:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/ Reference / Global_Objects / Function

  function evil (fn) {return new Function ('return' + fn) ();  } console.log (зло ('12 /5*9+9.4*2 '));  // = & gt;  40.4  

33
задан Déjà vu 28 March 2014 в 13:10
поделиться

13 ответов

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

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

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

96
ответ дан jprofitt 17 August 2018 в 13:18
поделиться
  • 1
    Вы не могли бы объяснить это проще! Хотя мне все еще сложно понять, почему я не могу просто откликнуться в функции, а затем повторить функцию, которую я понимаю, что происходит за кулисами между эхом и возвратом, благодаря вашей аналогии: D – Joe Morales 22 February 2012 в 17:18
  • 2
    Подумайте, хотите ли вы сохранить результаты в переменной, чтобы вы могли использовать ее позже. Если ваша функция echo s вместо return ing, вы фактически ничего не можете сохранить в переменной. – jprofitt 22 February 2012 в 17:43
  • 3
    О, я вижу!!!! Я думаю, что я наконец получаю это: -D ... Теперь мне просто нужно знать, почему результаты из echo и return могут быть разными lol (см. Пост @Aron Cederholm ниже) Большое спасибо jprofitt - я ценю ваша помощь! – Joe Morales 22 February 2012 в 18:10
  • 4
    что лучше использовать для программирования echo или return в php-функциях? Что более безопасно? – csandreas1 13 March 2018 в 15:10

Разница между ответом функции заключается в том, что «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
ответ дан Alex 17 August 2018 в 13:18
поделиться

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

3
ответ дан BenOfTheNorth 17 August 2018 в 13:18
поделиться

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

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

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.
20
ответ дан Community 17 August 2018 в 13:18
поделиться

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

<?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
ответ дан Daniel Pryden 17 August 2018 в 13:18
поделиться

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

Таким образом,

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

выведет:

25

while

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

выведет:

5
20
0

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

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

6
ответ дан eb123 17 August 2018 в 13:18
поделиться
  • 1
    Я вижу, что здесь происходит, но не знаю, почему! Я имею в виду, почему в первом случае он добавляет результаты, а второй не делает: -S – Joe Morales 22 February 2012 в 18:11
  • 2
    Функция очень похожа на волшебную коробку. Вы помещаете что-то в него (параметры) и тянете рычаг, и что-то происходит или что-то возвращается. Например. вы поместите яблоко в черный ящик и нажмите «Старт». После множества звуков и шумов коробка внезапно сажает яблонь в землю, которая мгновенно растет до полного размера. Это то, что выполняет черный ящик / функция. Но когда вы открываете коробку, осталось яблоко, а только яблочная морщина. Это то, что функция возвращает. – Aron Cederholm 22 February 2012 в 22:25
  • 3
    Теперь рассмотрим add1 и add2. Add1 - черный ящик с двумя входными лотками спереди. В первом лотке вы кладете огромную клетку яблок, слишком много для вас, чтобы посчитать. Во втором лотке вы кладете еще одну огромную клетку яблок, также слишком много для подсчета. Когда вы нажимаете кнопку запуска, вы слышите какой-то шум, а из задней части коробки входит клетка из всех яблок (всего 91,218 яблок). – Aron Cederholm 22 February 2012 в 22:28
  • 4
    Затем вы кладете две другие клетки яблока во входящие лотки черного блока add2. Звучит много, и из черного ящика ничего не выходит. Вместо этого черный ящик создает руку, которая пишет «91,218». на белой доске рядом. – Aron Cederholm 22 February 2012 в 22:31
  • 5
    Теперь подумайте, что вы действительно компьютер. Вы слепой робот, который делает только то, что вам говорят. В первом примере вы можете просто взять полученную клетку яблок и посчитать их, и вы сразу узнаете (потому что вы так быстро), что в клетке есть 91,218 яблок. Но в другом примере вы не получили клетку возврата, и, поскольку вы слепы, вы действительно не знаете, что написал черный ящик на белой доске. – Aron Cederholm 22 February 2012 в 22:33

Наиболее важным различием между 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));

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

0
ответ дан Magdi Elmowafy 17 August 2018 в 13:18
поделиться

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

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

39
ответ дан Mathias R. Jessen 17 August 2018 в 13:18
поделиться

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

5
ответ дан Mr Green 17 August 2018 в 13:18
поделиться

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

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

}

4
ответ дан sandeep_kosta 17 August 2018 в 13:18
поделиться

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

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;
2
ответ дан Smamatti 17 August 2018 в 13:18
поделиться

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

1
ответ дан user3706926 17 August 2018 в 13:18
поделиться

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

0
ответ дан zaw 17 August 2018 в 13:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: