• 締切済み

値を戻すとは

すいません。PHPの勉強を始めたのですが、解説サイトを見ても どうしてもわからない部分があります。 下記の関数のreturnの部分ですが、これechoに置き換えても同様の結果が得られますよね? どの解説サイトを見ても 「echoは戻り値が無く、出力を行う、returnは値を戻し、プログラムが終了する」 とだけしか説明は無く、それ以上の解説は見当たらないのですが、私には両者の違いがいまいち分かりません。 似たようなユーザー定義関数をウェブで拾ってきて、returnをechoに置き換えてみたりもしているのですが、全部結果は同じでした。 この2つはどのように使い分けるのでしょうか?? <?php function tashizan( $number ) { return $number + 50; } // tashizan() echo tashizan( 50 ); ?>

  • PHP
  • 回答数3
  • ありがとう数0

みんなの回答

noname#138894
noname#138894
回答No.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)
回答No.2

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)
回答No.1

> 下記の関数の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を書いたときの説明になっているようですし。

関連するQ&A

  • 変数に格納する文字列の表示方法

    お世話になっております。 function.php内で定義した関数で、 HTML上のtitleタグ内に、個別の値を入れたいのですが、 ------function.php-------- function my_title() { $blogtitle = bloginfo('name'); ~~~ $title1 = $parent_name. 'のグループ&nbsp;|&nbsp;'. $blogtitle; return $title1; } function.php内で上記のように戻り値を設定した場合、 <title><?php echo my_title(); ?></title> 上記の出力では、$blogtitleが一番最初に表示されて出力されてその後に「 $parent_name. 'のグループ&nbsp;|&nbsp;'」の文字がくるのですが、 何か書き方の間違いでしょうか??

    • ベストアンサー
    • PHP
  • function の 戻り値の、値が入らない。

     一度作ったPHPを見直しています。 で、 globalを変数はどうしてもな時と、ここで みました。 私も、メモリーの節約や、きちんとしたスクリプトを 書くために、少なくしようと思うのですが、関数の 戻り値が、 Notice: Undefined variable: d in ○○○ 値がないと、注意がはいります。 (注意自体は、分かって出しています。) $a = 10; $b = 15; tst($a,$b); echo $d ; <?php function tst($a,$b){ $d = $a + $b ; echo $d ; return $d ; } ?> 関数内部の、echo $d;では、表示されるので、 間違ってはいないと思うんですが、どこが違うんで しょうか? HPや、本で調べてはみたんですが、下手の考え休むに にたり、かなーと、思ってきたので、もうお風呂に 入ろうかと。^^; よろしくお願いします。

    • ベストアンサー
    • PHP
  • ユーザ関数function の扱いについて。

    おそらくは、初歩的な質問なのだろうとは思いますが、どうぞよろしくお願い致します。 早速ですが、質問に入ります。(PHP4または5での話です。) //関数を定義 function test($a){   $b = $a*100;   print $b;   return $b; } //テキトーに値を用意して変数に格納 $c = 5; //------------------------ 作った関数を使ってみる //------------------------ //(その1)関数内の処理結果をprintしてくれるものと思って使っている。 test($c); //------------------------- //(その2)関数内の処理結果の戻り値を変数$dで受け、それをprint。 //「その1」との違いを調べたくて、こんなことをしている。 $d = test($c); print $d; //------------------------------- さて、何が言いたいかと言いますと(笑)、 まず、上記(その2)に着目して頂いて、 関数定義の中でprint()を使用している関数に対し、 その定義の中にreturnがあるからと、 $dでその戻り値を受けているわけですが、 この場合、print()で出力した値は、一体、どこへ行ってしまったのでしょうか。 このような質問のしかたをしていますが、 分からないのは、この辺りの処理の流れ全体なんです。 つまり、print()したものがどうなったのかだけが知りたいわけではなく、 ユーザ関数内のprintとreturnの関係とか、そのあたりです。(笑) return; が来たら関数内の処理を抜ける、 ということは分かっています。 以上、1つずつ順を追って説明して頂けると助かります。 //-------------------補足------------ //新たに関数を定義 function test2($a){   $b = $a*100;   print $b; } $e = 5; $f = test2($e); //returnのない関数から戻り値を受け取ろうとしてもダメ //ということは、こんな私にでも分かっています。 //---------------------------- 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpコードの戻り値をhtmlファイルに入れるには

    こんばんは。 質問は.htmlファイルからphp関数を直接呼べるか否か、 呼べないとしたら.cgiなどを利用すればよい? 引数なしのphp関数の戻り値を.htmlの一部に出力させるにはどうしたら よいかです。 phpで作成したfunction fnc_test(){return "aaa";}の値を aaa.html内に出力させたいのです。 aaa.phpファイルにだったらecho fnc_test();で表示されると思うのですが、 aaa.htmlに<body>fuc_test();</body>とやってももちろんphpが起動せず、表示されませんよね。 同じ事をさせたいときにaaa.htmlを新しく作成すれば(phpにて"aaa"と書いたaaa.htmlと言う名前のファイルを作成)できると思うのですが、 動的に一部だけ変更するためにはjavascriptを利用するとか、cgiを利用(cgiでラップする?)しなければやっぱり駄目なのでしょうか? .htmlファイルにサーバ上でphpの関数の戻り値(テキスト)を組み込むのにはどうしたらよいですか?できたらjavascriptは使いたくないのですが。 乱文すみません。ご回答宜しく御願いします。

    • 締切済み
    • PHP
  • microtime関数は、結構イイカゲン?!

    いつもお世話になっております。 環境/PHP5 <?php //開始時刻を記録 $start_time = microtime(); //ユーザ定義関数 user_function($arg); //終了時刻を記録 $end_time = microtime(); //時刻差を求め、ユーザ定義関数の処理にかかった時間を求めたい $dif_time = $end_time - $start_time; //求めた数値を出力 echo $dif_time; //関数の定義 function user_function($arg){ ~処理定義~ } ?> 上記スクリプトの出力結果が、 マイナスの値だったり、プラスの値だったりするのですが、 それはなぜなのでしょう? -0.238105 だったり、 0.708105 だったりします。 プラスの値で、数字が上下するならまだしも、 値がマイナスになる意味がわかりません。笑 軽くバックトゥザフューチャーしちゃってるのでしょうか。 ともかく、すごく、あてにならない感じなのです。 microtime関数は、結構イイカゲンな仕様なのでしょうか?

    • ベストアンサー
    • PHP
  • function の return 値を表示したいのですが・・

    例えば、 function m(r) { return r; } という関数があって、それをブラウザ起動と同時に実行し、 戻り値 r の中身を、ブラウザ上に表示したいのです。 r は、入力と同じになっていますが、つまり入力される値が どのような値で入ってくるかを見たいのです。 よろしくお願いします。

  • 可変関数について。また、どこまで深く学ぶべきか

    phpを勉強しています。可変関数というものがあることを知り、試しに動かしてみました。 そのときに疑問になったことがあります。 可変関数は使わずに、関数内で変数に値を格納し直してreturnで値を戻せば同じことができるのでは?と思いやってみましたが変数に格納されている値が変わりませんでした。 この原因が分かれば教えて頂きたいです。 また、値渡ししたものは関数内で値を変えても影響がない、ということだけ知っていて、 その原因について詳しく知っていなくても問題はでないでしょうか。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>可変関数</title> </head> <body> <?php /*可変関数を使わない場合*/ function kahen_off_1($kf1) { $kf1 = "A<br>"; } function kahen_off_2($kf2) { $kf2 = "B<br>"; } $kahen_off = "default<br>"; echo $kahen_off; //default kahen_off_1($kahen_off); echo $kahen_off; //default kahen_off_2($kahen_off); echo $kahen_off; //default echo "<br>"; /*可変関数を使う場合*/ function kahen_on_1($kn1) { $kn1 = "A<br>"; } function kahen_on_2($kn2) { $kn2 = "B<br>"; } $kahen_on = "default<br>"; echo $kahen_on; //default kahen_on_1(&$kahen_on); echo $kahen_on; //A kahen_on_2(&$kahen_on); echo $kahen_on; //B echo "<br>"; /*returnでやる場合*/ function kahen_return_1($kr1) { $kr1 = "A<br>"; return $kr1; } function kahen_return_2($kr2) { $kr2 = "B<br>"; return $kr2; } $kahen_return = "default<br>"; echo $kahen_return; //default echo kahen_return_1($kahen_return); //default echo kahen_on_2($kahen_return); //default ?> </body> </html>

    • ベストアンサー
    • PHP
  • 【PHP】関数で処理が止まってる??

    お世話になります。 PHPでの質問ですが、PHPに限ったものではないように思いますので、プログラム全般に対しての質問と思って下さって結構です。 ※PHP特有のという意見があれば、それも大歓迎です。 下記のようなコードを組んでみました。 <?php echo "func1の結果["; echo func1(); echo "]"; function func1(){ (内容は割愛) return TRUE; } ?> このコードをアップしてアクセスしてみると   出力結果  func1の結果[ でした。 ブラウザのステータスに「ページが表示されました」とあるので、処理中で出力待ちということはないと思います。 > echo func1(); > echo "]"; の箇所の出力はどうなっていると考えればいいのでしょうか? 「関数の内容次第で・・・」とお答えになる方、どういう内容だとこのような結果になるのかというところでお答えください。 私のプログラムによる根本的な考え方は、プログラムは上から下に順番になので、 上記内容の箇所にどんなコードがあったとしても、func1関数はTRUEを返すので、結果としては「func1の結果[1]」となるはずでした。 でも実際の出力結果をみると処理が途中で(おそらくfunc1()内で)止まっているともいます。 timeoutではないため無限ループに嵌ってっていうのもないと思います。 これはどういうことでしょう???

    • 締切済み
    • PHP
  • 0を定義域とし、1を値として生成する関数

      0を定義域とし、計算の結果として値1を出力する関数は作れますか。  

  • phpで関数の定義について <?php fun

    phpで関数の定義について <?php function say_hello(){ echo "hello world"."\n"; } say_hello(); echoというのはもともと関数ですよね? 関数を定義するとは、関数を新たに作るということですよね? この新たに作った、say_hello();という関数の中に echo "hello world"."\n";という関数を入れてあるということですか?

    • ベストアンサー
    • PHP

専門家に質問してみよう