関数の返り値
返り値とは
何度か説明してきましたが、返り値とは関数が返す値の事です。関数にはそれぞれ、「どんな処理をするか」・「処理させる値」・「関数が返す値」が決められています。「どんな処理をするか」は関数の内部に記述する処理内容ですし、「処理させる値」というのは関数の括弧「()」内に記述する引数の事を指します。
さらに、「関数が返す値」として返り値というものを指定する事ができます。PHPであらかじめ用意されている定義済みの関数にも返り値を持つものが圧倒的に多いです。
今までのサンプルでは関数の中に「出力する」という内容が含まれているものばかりだったため、返り値の指定は特にしていませんでしたが、出力を伴うものでなくても関数は作れます。その場合、「目に見える形で出力したい」となると返り値自体を変数に代入して後から出力する方法となるのですが、変数に代入できる分融通が利くので便利です。
返り値の指定方法
では早速返り値を指定する方法を紹介していきます。
function 関数名(引数){
処理内容;
return 返り値;
};
使い方は簡単で「return」の後に返したい値を指定するだけです。returnの後に指定した値はreturn文の引数として扱われます。指定できる値はPHPで扱える値ならなんでもOK!!。つまり文字列や数値・配列なんかでも全然大丈夫♪って事です。ちなみにreturn文はオプションの為指定してもしなくてもいいですが、今回はそのreturn文の解説のため、全てのサンプルにreturnがついてる事と思いますwww。
注意して欲しいのはreturnには「値を返す」という機能の他に「スクリプトの実行を中止する」という機能もあるという事です。つまり、return文は処理の最後の部分(条件分岐なら最後の条件分岐)に書いておかないと、せっかく記述してもreturn後のスクリプトを実行してくれなくなってしまいます。
以下のサンプルでの関数は指定した名前に「こんにちわ」と敬称の「さん」をつけて値を返すだけの簡単な関数ですがreturn文の動作を見るのには十分でしょう。
<?php
function hello_user($user){
return "こんにちわ ".$user."さん";
};
echo hello_user("そふぃ");
?>
出力結果
今回は関数の処理部分(関数の中に記述してる処理)ではなく実行部分で出力してます。これは関数に返り値を指定したからで、このようにすると関数が実行された場合に必ず値を返すようになります。echo()文はこの関数の返り値を出力しています。
出力か返り値か選べる関数
さて、前ページでやった関数の引数とこのreturn文を組み合わせると、関数内で引数を一定の処理した後に、「出力するか、返り値にするか」というのを使う時(実行する時)に選べる関数を作成できます。このように「出力or返り値」って選択などを関数作成時ではなく関数実行時に選択できるようにしておくとプログラムの汎用性が高まります。
ま、よーするに関数を作る時に「出力・返り値」のどちらかしか記述しないと、その関数はどちらかの機能しか持ちませんが、関数実行時に選択できるようにしておくと後から使いたい場合は返り値の形式・すぐ出力したい場合は出力の形式、とどちらの場合でも使えるので便利って事です。
<?php
//$return_flagは出力か返り値かをフラグ化したものです。
function order_drink( $drink, $return_flag=0 ){
$mes = "ご注文は".$drink."です。";
//条件判定で、返り値フラグが立っているかどうか調べる
if($return_flag === FALSE or $return_flag == 0){
//FALSEまたは0なら出力
echo $mes;
} else if($return_flag === TRUE or $return_flag === 1){
//TRUEまたは1なら返す
return $mes;
} else{ //それ以外の引数を指定した場合はエラーメッセージと引き数の値出力
echo "無効な引数が指定されています:".$return_flag;
}
};
order_drink("コーヒー");
echo "<br>\n";
echo order_drink("紅茶",1);
?>
出力結果
ご注文は紅茶です。
「$return_flag=0」と返り値のフラグを立てておき、第2引数($return_flag)を何も指定しない場合・0またはFALSEなどにした場合は「出力する」が、第2引数を1またはTRUEに指定した場合は「値を返す」というサンプルになります。
if文の条件式ですが、演算子が「===」となってます。「===」は「型も値も同じ」って意味ですが、こうしておかないと、第2引数に、例えば全然関係ない"hello"とかを指定してもTRUEとみなされてしまいます。どうしてかっていうと、PHPでは「値が存在する」ってだけで判定としてはTRUEなんです。今回はTRUE/FALSEという形式の他にも1/0でも判定させたかったのでちょっと長くなりました。
さらに無効な引数を指定した場合、エラーメッセージ(無効な引数が〜〜)らしきもの(笑)と指定した引数が出力されます。エラーメッセージのところを赤などで色付けしてもいいかと思います。


