初歩的な質問ですがよろしくお願いいたします。
PHPのユーザー定義の関数について勉強をしているのですが、いまいち理解ができないのでそもそもの使い方も含めアドバイスを頂けないでしょうか。
以下の解説があったのですが、
php
1<?php 2function getSum($num1, $num2){ 3$sum = $num1 + $num2; 4return $sum; 5} 6 7$sum = getSum(2,5); 8?>
$sum = getSum(2,5); で引数を指定しているのは、場面場面での対応を行うためだと思うのですが、return $sum;という記述の意味がよくわかりません。なぜ、return をする必要があるのでしょうか?
return しなくとも、$sum;の数字は変わらないですよね?
記述を見ていても、こんがらがって分からなくなってしまいます。
宜しくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/02 06:41
2020/04/02 07:01
2020/04/02 07:44
2020/04/02 07:47
2020/04/02 08:18
回答2件
0
ベストアンサー
なぜ、return をする必要があるのでしょうか?
return しなくとも、$sum;の数字は変わらないですよね?
returnしないと関数はNULLを返します。
せっかくコードを書いているのですから、
returnする場合としない場合のそれぞれを実行してみましょう。
php
1function getSum($num1, $num2){ 2 $sum = $num1 + $num2; 3 return $sum; 4} 5 6$sum = getSum(2, 5); 7var_dump($sum); // 7が表示されます。
php
1function getSum($num1, $num2){ 2 $sum = $num1 + $num2; 3} 4 5$sum = getSum(2, 5); 6var_dump($sum); // NULLが表示されます。
関数内で書かれた変数は、通常関数の外では値を参照できません。
関数外でも関数内の変数を参照したい場合はglobal宣言をします。
ただし、これは不具合の原因になりやすいので、基本的には悪手です。
php
1function getSum($num1, $num2){ 2 global $sum; 3 $sum = $num1 + $num2; 4} 5 6getSum(2,5); 7var_dump($sum); // 関数内で変数に代入された7が表示されます。 8 9$sum = getSum(2, 5); 10var_dump($sum); // この場合も関数の返り値はNULLのため、NULLが表示されます。
そもそもの使い方も含めアドバイスを頂けないでしょうか。
今回例示されたgetSumの場合、
$sum = getSum(2, 5);
としても
$sum = 2 + 5;
としても結果が同じになるのであまり恩恵を感じないかもしれません。
例えば消費税の計算をプログラム内でするとしましょう。
php
1$tax1 = 100 * 0.1; 2$tax2 = 200 * 0.1; 3$tax3 = 300 * 0.1; 4$tax4 = 400 * 0.1; 5$tax5 = 500 * 0.1;
もし消費税率が10%から5%に変更された場合、
0.1と書いた5か所を0.05に変更する必要があります。
これが関数を利用した場合はどうでしょうか。
php
1function calcTax($num){ 2 return $num * 0.1; 3} 4$tax1 = calcTax(100); 5$tax2 = calcTax(200); 6$tax3 = calcTax(300); 7$tax4 = calcTax(400); 8$tax5 = calcTax(500);
消費税が10%から5%に変更された場合でも、
プログラムは関数内の0.1を1か所変更するだけで済みます。
消費税の計算が今回の例のように固まっておらず、
プログラム内のあちこちで行われていた場合に書き換え漏れをなくせます。
関数を使えば同じ処理を使い回す場合に、変更に強くなります。
投稿2020/04/02 07:52
総合スコア144
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/02 08:44 編集
2020/04/02 08:25
2020/04/02 08:34
0
こちらは何とか理解できている気がするのですが…。定型文とか、決まった計算、決まった表示などを指定して登場する状況ごとに変化をつけたい場合に、引数を利用するとの認識でよいでしょうか?
はい、大丈夫です。
もし、上記のソースを利用して、返り値を付けたコードを書くとどのように書けばよいのでしょうか?
簡単に書けばこうなります。return
をつけることでその値を返すことが出来ます。
値を返すというのは、関数の中で計算などの処理を行い、その結果を関数の外側に出す、ということです。
下の例では変数$modoriti
に、関数aisatu
の結果、つまり佐藤さん、こんにちは!
という値が入っています。
php
1 <?php 2 function aisatu($name, $aisatu) 3 { 4 //これで値を返している 5 return $name . "さん、" . $aisatu; 6 } 7 //ここで呼び出して、処理の結果をもらう。 8 $modoriti = aisatu("佐藤", "こんにちは!"); 9 10 //佐藤さん、こんにちは! と出力される 11 print $modoriti; 12 ?>
戻り値を利用するメリットの一つとして、同じ変数を複数の関数で処理できるということです。
例えば、以下のコードでは変数$my_number
に、関数tasizan
で数字を1足し、次に関数kakezan
で10をかけています。
php
1<?php 2//足し算をする関数 3function tasizan($num) { 4 $kekka = $num + 1; 5 return $kekka; 6} 7 8//掛け算をする関数 9function kakezan($num) { 10 $kekka = $num * 10; 11 return $kekka; 12} 13 14//my_numberという変数に100を入れる。 15$my_number = 100; 16 17//ここではまだ100が出力される。 18print $my_number; 19//改行用 20print "\n"; 21 22//my_numberを関数tasizanで1を足す。 23//足した結果を同じ変数に上書きする。 24$my_number = tasizan($my_number); 25 26//101が出力される。 27print $my_number; 28//改行用 29print "\n"; 30 31//つぎはmy_numberを関数kakezanで10をかける。 32//かけた結果を同じ変数に上書きする。 33$my_number = kakezan($my_number); 34 35//1010が出力される。 36print $my_number; 37?>
以上が関数の戻り値の説明です。
質問に対する答えになっているでしょうか?
もしわからないことがあったら遠慮聞いてください!
投稿2020/04/02 07:21
総合スコア8
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/02 07:42
2020/04/02 08:15
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。