- 締切済み
値を戻すとは
すいません。PHPの勉強を始めたのですが、解説サイトを見ても どうしてもわからない部分があります。 下記の関数のreturnの部分ですが、これechoに置き換えても同様の結果が得られますよね? どの解説サイトを見ても 「echoは戻り値が無く、出力を行う、returnは値を戻し、プログラムが終了する」 とだけしか説明は無く、それ以上の解説は見当たらないのですが、私には両者の違いがいまいち分かりません。 似たようなユーザー定義関数をウェブで拾ってきて、returnをechoに置き換えてみたりもしているのですが、全部結果は同じでした。 この2つはどのように使い分けるのでしょうか?? <?php function tashizan( $number ) { return $number + 50; } // tashizan() echo tashizan( 50 ); ?>
- みんなの回答 (3)
- 専門家の回答
みんなの回答
例えば、渡した値段の消費税を求める関数があるとします。 この関数を使って商品と送料(非課税)の合計金額を求めたいとします。 この場合、消費税の金額を関数の外で利用する必要があります。 そういった時に戻り値を使います。 こんな感じ <?php //消費税を計算する関数の定義 function getTax($price){ //実際は端数の処理が必要 return $price * 0.05; } //商品の値段 $price = 100; //送料 $shipping = 600; //商品の消費税 $tax = getTax($price); //商品+消費税+送料の合計値 $totalPrice = $price + $shipping + $tax; //合計金額の表示 echo "商品+消費税+送料の合計金額は".$totalPrice."円です";
- JaneDue
- ベストアンサー率75% (263/350)
Ano1で納得いかないようならもう少し…。 >この2つはどのように使い分けるのでしょうか? echo するかreturnするかでは、汎用性が違ってきます。 もちろん「関数内でecho して、何もreturnしない」方法でもかまいません。ただそうすると、Ano1さんのサンプルのように「計算だけしてechoはしたくない場合、その関数は使えない」ことになります。 たとえば、四角や円・台形・三角が入りくんだ複雑な形の面積を計算したい場合、1つの関数で全部計算してechoするのではなく、それぞれの面積を算出する関数を作成してreturn するようにしておけば、使いまわしができます。つまり汎用性が高まります。 一般的に、何から何までやってくれる関数 はその場では楽だが、汎用性は下がります。 「余計な事はしないで、与えられた処理だけ行ってreturnする」関数の方が後々も使えて便利です。 ※ただしHTMLのヘッダーなどのように必ず出力すると決まっている場合は以下のようでもよいでしょう。 function html_header($title){ echo "<html><title>$title</title><body>"; return; //△戻り値が無いことを明記しておくと後々分かりやすい } >echoは戻り値が無く、出力を行う 出力するだけなので、戻り値があっても仕方ないですよね。 >returnは値を戻し、プログラムが終了する 明らかに間違いです。 http://jp2.php.net/manual/ja/function.return.php
- kmee
- ベストアンサー率55% (1857/3366)
> 下記の関数のreturnの部分ですが、これechoに置き換えても同様の結果が得られますよね? それは <?php function tashizan( $number ) { echo $number + 50; } ?> とする、ってことですか? だとすると、 質問にあるプログラムは ・tashizanは引数に50足した値を返す関数 ・echo tashizan(50);はtashizan関数に引数50を与えて、その戻ってきた値を表示 です。上にあるのは ・tashizanは引数に50足した値を「表示する」関数。値は返さない となります。tashizanの仕様がまったく違います。 例えば、次のプログラムで、return を echo に変えてみてください。結果が違います。 <?php function tashizan( $number ) { return $number + 50; } $a = tashizan(12) ; $b = tashizan(34) ; echo $a + $b ; ?> >どの解説サイトを見ても >「echoは戻り値が無く、出力を行う、returnは値を戻し、プログラムが終了する」 本当ですか? だとしたら探し方が悪いと思います。 returnの説明が関数のものでなく、メインプログラムにreturnを書いたときの説明になっているようですし。