質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

1回答

3239閲覧

PHPの関数内の返り値について

newyee

総合スコア213

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

1クリップ

投稿2017/09/02 12:47

PHPの関数を勉強中なのですが、以下のコードにつきまして分からない部分ありますのでお聞きしたいです。

php

1<?php 2 3// エラーメッセージ用配列 4$err_msg = array(); 5 6// 初期化 7$height = ''; 8$weight = ''; 9$bmi = ''; 10 11// リクエストメソッド取得 12$request_method = get_request_method(); 13 14// POSTの場合 15if ($request_method === 'POST') { 16 17 // POSTデータ取得 18 $height = get_post_data('height'); 19 $weight = get_post_data('weight'); 20 21 // 身長の値が小数かチェック 22 if (check_float($height) !== TRUE) { 23 $err_msg[] = '身長は数値を入力してください'; 24 } 25 26 // 体重の値が小数かチェック 27 if (check_float($weight) !== TRUE) { 28 $err_msg[] = '体重は数値を入力してください'; 29 } 30 31 // エラーがない場合 32 if (count($err_msg) === 0) { 33 // BMI算出 34 $bmi = calc_bmi($height, $weight); 35 } 36 37} 38 39 40/** 41* BMIを計算 42* @param mixed $height 身長 43* @param mixed $weight 体重 44* @return float BMI 45*/ 46///////////////////// 47// calc_bmi関数作成 48///////////////////// 49 50/** 51* 値が正の整数又は小数か確認 52* @param mixed $float 確認する値 53* @return bool TUREorFALSE 54*/ 55///////////////////// 56// check_float関数作成 57///////////////////// 58 59/** 60* リクエストメソッドを取得 61* @return str GET/POST/PUTなど 62*/ 63function get_request_method() { 64 return $_SERVER['REQUEST_METHOD']; 65} 66 67/** 68* POSTデータを取得 69* @param str $key 配列キー 70* @return str POST値 71*/ 72function get_post_data($key) { 73 74 $str = ''; 75 76 if (isset($_POST[$key]) === TRUE) { 77 $str = $_POST[$key]; 78 } 79 80 return $str; 81 82} 83?> 84<!DOCTYPE html> 85<html lang="ja"> 86<head> 87 <meta charset="UTF-8"> 88 <title>BMI計算</title> 89</head> 90<body> 91 <h1>BMI計算</h1> 92 <form method="post"> 93 身長: <input type="text" name="height" value="<?php print $height ?>"> 94 体重: <input type="text" name="weight" value="<?php print $weight ?>"> 95 <input type="submit" value="BMI計算"> 96 </form> 97<?php if (count($err_msg) > 0) { ?> 98<?php foreach ($err_msg as $value) { ?> 99 <p><?php print $value; ?></p> 100<?php } ?> 101<?php } ?> 102<?php if ($request_method === 'POST' && count($err_msg) ===0) { ?> 103 <p>あなたのBMIは<?php print $bmi; ?>です</p> 104<?php } ?> 105</body> 106</html>

上記コードの、POSTデータ取得処理の部分なのですが、$height = get_post_data('height');におきましては、get_post_data関数が実行され、その返り値が$heightに代入されるものと思います。
ここでget_post_data関数につきましてご質問があります。

php

1function get_post_data($key) { 2 3 $str = ''; 4 5 if (isset($_POST[$key]) === TRUE) { 6 $str = $_POST[$key]; 7 } 8 9 return $str; 10 11}

関数内で定義された、$strには最終的に、'height'の文字列が入ると思いますのですが、return $str;とすることで、要は、get_post_data関数自体の結果を$height に代入しているという解釈で合っていますでしょうか?

当然かとは思いますが、仮に、return $str;としなかった場合には、$heightの中身は空になるということでしょうか?

それと、get_post_data関数に限らず、関数の返り値は一つなのでしょうか?
分からない箇所多くて、質問がまとまらず申し訳ないのですが、教えて下さる方いましたらよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

return $str;とすることで、関数を実行した際にreturn処理部分を通った際に関数の結果として次の式の処理に渡されるので、get_post_data関数自体の結果を$height に代入しているという解釈で合っていると思います。
return で値を返さない場合は、PHPではnullになります。
関数の戻り値は一つです(returnを関数中に複数記述することは可能です)。複数を返したい場合は配列にするか、オブジェクト等で返します。
php7.1からlist() におけるキーのサポートという機能で、配列を返した際に呼び出し元でキーを指定して代入できたりもします。
PHP 7.0.x から PHP 7.1.x への移行

投稿2017/09/02 12:58

編集2017/09/02 13:01
aro10

総合スコア4106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

newyee

2017/09/02 13:08

ご回答ありがとうございます。 現在ユーザー定義関数の勉強中なのですが、関数内で定義された変数は使えない~などの説明を読んだりしている内にごちゃごちゃになって分からなくなってしまいまして...^^; 説明してくださって助かりました! 関数内で定義した変数だろうと、結果をreturnで返すことによって、その関数の結果として処理されるということが分かった良かったです!
aro10

2017/09/02 13:13

一応PHPにも$GLOBALSというグローバル変数の定義がありますが、プログラム構造を壊すので禁則として使わないので、関数やクラスのメソッドを呼び出しとreturn値を繰り返してバケツリレーのようにして受け渡していくのが一般的なプログラム方法です。 [$GLOBALS](http://php.net/manual/ja/reserved.variables.globals.php)
newyee

2017/09/02 13:19

返信ありがとうございます! 参考にさせて頂きます。
newyee

2017/09/03 03:44

すみません。実は質問の内容に書いていないことで、分からない部分がありまして... 教えて頂きたい部分があります<(_ _)>質問に書いてない部分ですので、答えて下さらなくても全然いいんですが、教えて頂けると幸いです... では、以下の内容からご質問させて頂きたいと思います。 /** * 値が正の整数又は小数か確認 * @param mixed $float 確認する値 * @return bool TUREorFALSE */ ///////////////////// // check_float関数作成 ///////////////////// 上記の部分におきまして、 「@return bool TUREorFALSE」と書いてあるのですがこれは「return」で何を指定すれば良いのでしょうか? 自分なりにコードを書いてみたのですが、エラーがでてしまいうまくいきませんでした。。。 function check_float($value){ $check = ''; if(preg_match('^([1-9]\d*|0)(\.\d+)?$',$value) === 0){ $check = FALSE; }else{ $check = TRUE; } } 自分でもおかしいと思っていたのですが、返り値が何を意味しているか分からなかったもので... ご回答くださるようでしたら、ご教授願えればと思います。 よろしくお願いします。
aro10

2017/09/03 13:32 編集

@return bool TUREorFALSE のコメントが、PHPDocだとすると 参考 [phpDocumentorの書き方](http://qiita.com/itosho/items/0f809e067a9e4a41515e) 関数の戻り値は、bool型で真偽値が期待されているので、 check_float関数の役割として、$valueがfloat型か確認した処理の結果を 真ならば return true; 、偽ならば return falseで返せばよいかと思います。 $check = TRUE;を return true;に$check = FALSE;を return false; にすると良いかと思います。
newyee

2017/09/03 15:15

ご返信、ご回答ありがとうございます! 「return true;」なんてできること、思いもよらなかったです。。。 無事、実行してみたらエラーもなくうまくいきました! わざわざご回答下さりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問