web-dev-qa-db-ja.com

PHP echoとPHP return in plain English?

はい、この質問をグーグルで検索し、教科書(ドンゴセリンによるPHP)を参照しましたが、説明を真剣に理解できないようです。

私の理解から:

echo =関数の最終結果を示します

return =関数から値を返します

次の関数にechoreturnの両方を適用しましたが、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>";

?>

両方とも結果を表示します!私は何を理解していないのですか?

38
Joe Morales

これについては完全に非技術的な答えをするつもりです。

Sally Functionという名前の女の子がいるとしましょう。彼女はあなたが好きかどうか知りたいです。あなたは小学校にいるので、Sallyにあなたが好きかどうかを尋ねるメモ(パラメーターを指定して関数を呼び出す)を渡すことにします。今あなたがすることを計画していることは彼女にこれを尋ねて、それから彼女があなたに言うことを皆に話すことです。代わりに、彼女に尋ねてからsheが全員に伝えます。これは、(情報を取得してそれを使用して)戻ることと、エコー(あなたが制御できない状態で全員に伝えること)と同等です。

あなたの場合、Sally echosがあなたからコントロールを取り、「今すぐこれを人々に伝えます」と言っているのに、あなたが彼女の応答を取り、あなたが何をすることができるのかそれでやりたかった。ただし、最終結果は、すでにエコーしていたものの戻ってこなかったものをエコーし​​ていたため、同時に人々に伝えていたということです(彼女はyouクラスがあなたを好きかどうか教えます)

107
jprofitt

以下を考慮してください。

<?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は実際には空です。

43

あなたはまだコメントを投稿していますが、それはあなたがコードの流れを理解していないので混乱していることを示唆しています。おそらくこれはあなたを助けるでしょう(特に Mathias R. Jessenの答え )。

したがって、これらの2つの関数を再度使用してください。

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.
23
BadHorsie

returnを使用すると、関数自体を変数のように扱うことができます。

そう

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

出力されます:

25

ながら

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

出力されます:

5
20
0

Add2のresultがないため。それが行うことは、単にエコーアウトすることです。実際に値を呼び出したコードに戻すことはありません。

ところで、あなたは愚かではありません。あなたは初心者です。私たちは皆、最初は初心者であり、最初に乗り越えなければならない一定のしきい値があります。あなたはおそらく最初に多くの「ばかげた」質問をするでしょうが、試してみて、何よりも実験を続ければ、あなたは学ぶでしょう。

6
Aron Cederholm

そのため、基本的には、ブラウザに何かを出力する場合は常にechoを使用し、スクリプトまたは関数を終了してデータをスクリプトの別の部分に渡す場合はreturnを使用します。

5
Mr Green

私はそれをテストした後に見つけたいくつかの違いがあります

1)returnは、関数の値を返すだけで、後で変数に格納した後で使用できるようになりますが、関数を呼び出すときに値を単に出力し、何も返しません。

これはこの短い例です

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

関数の応答の違いは、「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

echoはテキストなどをドキュメントにレンダリングし、returnは関数/メソッドなどからデータを呼び出したものに返します。戻り値をエコーすると、レンダリングされます(オブジェクト/オブジェクトではなく、テキスト/数値などと仮定)。

3
BenOfTheNorth

あなたの例のわずかな変更を使用して:

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

両方の機能の背後に、出力を切り替える行があります。

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

基本的に、HTMLにPHPを出力するには、エコーを使用する必要があります。他のWordでは、エコーする必要があります。

以下の2つの例は、明確な理解を提供します。

function myfunction() {
// script content here, and sample out maybe like this :

return $result; ---> sample 1
echo $result;   ---> sample 2

}

各サンプルのhtmlに$ resultを表示するには:

サンプル1では、<?php echo $result ?>を使用する必要があります

サンプル2では、<?php $result ?>を使用する必要があります

サンプル2では、関数内でエコーするため、エコーする必要はありません。

1
user3706926

Buddypressで変更を行っているときに学んだことの1つは、主にネストされたコア関数でreturnを使用し、sprintfを使用して動的変数をHTMLにバインドし、htmlのチャンクを呼び出したメイン関数に戻すことですそして、メイン関数で一度だけエコーアウトします。そうすることで、コードはモジュール化され、デバッグが容易になります。

0
zaw

私の観点でechoreturnの最も重要な違いは次のとおりです。
それぞれの結果のデータ型。
以下のような関数を作成する場合:

_<?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));
_

データベースから返される値を処理する場合、特に(ポストビューカウント)などの数学演算で、その違いは有益です。
これは、ここに書かれていることを理解する上で意味があります。
私がそれを簡単な方法で説明したことを願っています。

0
Magdi Elmowafy