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
Я собираюсь дать совершенно нетехнический ответ на этот вопрос.
Предположим, что есть девушка по имени Sally Function. Вы хотите знать, нравится она вам или нет. Поэтому, поскольку вы учитесь в начальной школе, вы решаете передать Салли записку (вызвать функцию с параметрами), спрашивая ее, нравится она вам или нет. Теперь то, что вы планируете делать, спрашивает ее об этом, а затем рассказывает всем, что она говорит вам. Вместо этого вы спрашиваете ее, а затем она рассказывает всем. Это эквивалентно возвращению (вы получаете информацию и делаете что-то с ней) против ее эха (рассказывая всем без вашего контроля).
В вашем случае происходит то, что когда Салли echo
s берет у вас контроль и говорит: «Я собираюсь рассказать людям прямо сейчас», вместо того, чтобы вы могли ее взять ответьте и сделайте то, что вы хотели с ним сделать. Конечный результат, однако, заключается в том, что вы сообщали людям одновременно, так как вы эхом отзывались о том, что она уже повторила, но не вернулась (она отрезала вас в середине , вы сообщают вашему классу если она вам понравилась или нет)
Разница между ответом функции заключается в том, что «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 .
echo
отображает текст и т. д. в документ, return
возвращает данные из функции / метода и т. д. во все, что называется. Если вы выполните эхо-возврат, оно отобразит его (предположим, что это текст / номер и т. Д.), А не объект и т. Д.).
Я вижу, что вы публикуете комментарии по-прежнему, которые предполагают, что вы сбиты с толку, потому что вы не понимаете поток кода. Возможно, это поможет вам (особенно с ответом Матиаса Р. Джессена ).
Итак, повторите эти две функции:
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.
Используя небольшую модификацию вашего примера:
<?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>";
?>
с return
сама функция может обрабатываться как переменная.
Таким образом,
return add1(2, 3) + add1(10, 10);
выведет:
25
while
echo add2(2, 3) + add2(10, 10);
выведет:
5
20
0
Поскольку нет result
для add2. То, что он делает, это только эхо-звук. Никогда не возвращал значение обратно коду, который его назвал.
Кстати, вы не тупой. Вы просто новичок. Мы все начинающие в начале, и есть определенный порог, который вам нужно будет пережить в начале. Вероятно, у вас, вероятно, будет много «немых» вопросов вначале, но просто продолжайте пытаться и прежде всего эксперимент , и вы узнаете.
Наиболее важным различием между 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 просмотров) или что-то в этом роде. Это будет иметь смысл в отношении того, что было написано здесь. надеюсь, что я объяснил это простым способом.
Рассмотрим следующее:
<?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
на самом деле пуст, так как функция прощания ничего не возвращает.
Итак, в основном вы хотите использовать эхо всякий раз, когда хотите вывести что-то в браузер, и использовать возврат, когда хотите завершить скрипт или функцию, и передать данные в другую часть вашего скрипта.
существует пара различий, которые я обнаружил после тестирования
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";
}
Для обеих функций у вас есть строка, которая переключает ваш вывод:
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
s вместоreturn
ing, вы фактически ничего не можете сохранить в переменной. – jprofitt 22 February 2012 в 17:43echo
иreturn
могут быть разными lol (см. Пост @Aron Cederholm ниже) Большое спасибо jprofitt - я ценю ваша помощь! – Joe Morales 22 February 2012 в 18:10echo
илиreturn
в php-функциях? Что более безопасно? – csandreas1 13 March 2018 в 15:10