【php】returnで処理を中断して値を返す方法

php
書いてる人
あいりゅー

プログラミングを学びながら更新しています。
iPhone/iPad/Mac/Apple WatchなどのApple製品はこちらで主に更新しています。
麻雀の反省をひたすら掲載してるブログもやってます。

あいりゅーをフォローする

このページについて

このページではphpで使えるreturnの使い方を解説しています。

return

returnは関数ではなく、if文やbreakなどと同じ制御構造と呼ばれるものになります。これらは引数などを渡すことなく使えます。

関数の外で使った場合

returnをよく使うのは関数内ですが、関数の外で使うこともできます。その際は現在実行中のスクリプトが終了します。

return;
echo 1;

このように書いた場合、returnの時点でスクリプトが終了するのでそれより下にある処理はなかったことになります。なのでechoは無かったことになります。

includeされた物にreturnが入っていた場合、スクリプトの制御が呼び出し元に移行します。どういうことかというと、AとBの2つのphpファイルがあったとします。Aの中身は以下の通り。

echo 1;
return;

そしてBの中身が以下の通り。

include ('A.php');
echo 2;

Bがメインスクリプトだとします。そしてBを実行するとA.phpを読み込んで処理を実行します。Aの中身は1を出力・returnの2つだけなので、Aのreturnまでくると制御がB.phpに戻ってきます。そしてその次にあるのがecho 2なので、それを実行します。結果は12と表示されています。

ちなみにですが、A.phpのreturnの中にはA.phpの処理で出来上がった物が戻り値として含まれています。なのでecho 1が実行されているというわけです。

return

仮にreturnではなくスクリプト自体を終了させるexitだった場合、処理はexitを行なった時点で終了するので2は出力されず、1のみが出力されることになります。

関数の中で使った場合

returnを最も多く見る場面はこっちかな?って思います。関数の中でreturnを実行した場合、その関数の処理を中断して呼び出し元に結果を返します。まずは例

function test($a) {
return $a * 20;
echo 1;
}
test(10); //10*20の結果に置き換わる
echo test(10); //200が出力

このように関数を作ったとします。この場合は

  1. 引数($a)に20を掛けた数値をreturnで呼び出し元に返す
  2. returnが実行されたので、それ以降の処理はスキップされる

という2つの処理が順番に行われます。つまりecho 1は無視されます。関数を呼び出して、引数を指定したら既に値が返ってくるのでechoやprintなどで出力して答え合わせしてみましょう。200のみが出力され、echo 1は無視されていることがわかります。

returnを関数内で呼び出すと処理を中断して値を返す

この他の使い方はというと

function test($a) {
$b = [1,2,3,4];
array_push($b,$a);
return $b;
}
var_dump(test(10));

このように使うと引数として渡した10が関数内の$b配列に加わります。そして加わった後の$bがreturnで返ってきます。このように配列に対しても使うことができます。

関数内で使うechoとreturnの使い分け

ここまで読むと関数内ではどっちを使うのがいいのか、正直困ると思います。どちらも使えるためそれぞれの特徴などをしっかりと把握しておきましょう。

echo
関数内で使うと、その時点で画面に出力する。その後の関数内の処理は続行される。
関数呼び出し元には値が返ってこない
return
関数内で使うと、その時点で関数の残りの処理がスキップされて呼び出し元に値が返される
関数を呼び出しただけでは画面に出力はしないので、関数を呼び出した後で出力する必要がある

2つはこのような違いがあります。関数の内容にもよりますが、その場で出力したい場合(途中経過や、複数のパターンなど)がある場合はechoを、結果が常に1つでその後の計算処理にも使うのであればreturnで値を受け取り、他の処理へと渡すのが良いかなと思います。

まとめ

returnは関数の中と外のどちらでも使えます。外で使った場合はその時点での処理を中断して制御を呼び出し元へと返す機能になります。関数内で呼び出すと残りの関数の処理をスキップして呼び出し元に指定した値を渡します。それぞれ用途が大きく異なるのでしっかり把握しておきましょう。

phpの基礎
phpとは?JavaScriptとの違いは?みたいなことから、基本の書き方などを解説。
echoとprint
画面に文字を出力する2種類の言語構造の使い方
変数
phpで使える変数の扱い方などを解説しています。
変数のスコープ(有効範囲)
変数のスコープについての解説です。
var_dump
変数の情報を見ることができる関数
print_r
変数の情報をわかりやすい形式で表示する関数
配列と連想配列
配列と連想配列の書き方と、便利な関数の解説など。
key
連想配列のキーを返してくれます。内部ポインタ関係あり。
count
配列や連想配列の要素数を数えてくれる関数の使い方解説。
ソート関数
配列に対してソートを行う関数の中から、代表的な5つの使い方解説です。
array_reverse
配列の中身の順番を反転させる関数です。
array_chunk
配列を指定した数で分割させるarray_chunk関数の使い方解説です。
array_combine
2つの配列を足して1つの連想配列にする関数です。
array_diff
2つの配列を比較して、存在しない値を出力する関数
array_push
配列に対して後方に要素を追加する関数
array_unshift
配列に対して先頭に要素を追加する関数。
array_shift
配列の先頭の要素を取り出す関数。
array_merge
複数の配列を統合して1次元の配列にする関数
array_intersect
2つの配列を比較して、両方に共通するものを出力する関数
include
includeを使って別のphpファイルを読み込む方法の解説。
if文
if文を使って処理を変更させる方法の解説。
switch文
switch文を使って複数の処理分岐を行わせたい時に使います。
forループ
forループを使って同じ処理を行わせる方法の解説です。
whileループ
whileループを使って同じ処理を行わせる方法の解説と注意点。
do-whileループ
do-whileループを使って同じ処理を行わせる方法の解説です。
foreachループ
foreachループを使って配列内のアイテム全てに処理を行う方法の解説です。
continue
ループ処理の残りをスキップしつつ、ループの先頭に戻る制御構造
ループのネスト構造(入れ子)
ループの中にループを入れる書き方や考え方の解説。
function
functionを使って自作の関数を作成・使用する方法の解説。
引数の種類と書き方解説
functionで扱う引数の種類と書き方を解説
return
returnの使い方と関数での使い方解説。
class
classを作成して変数と関数を1つにまとめる方法と使い方の解説。
constructとdestruct
classのインスタンス作成と同時に処理を行うconstructと、スクリプトの終了と同時に実行するdestructの解説です。
インターフェイス
インターフェイスという用語の解説と、実際の使い方解説
トレイト
コードを再利用するのに便利なトレイトの解説です。
列挙型
プログラム中で使う変数名をあらかじめ定義しておく。そんな感じの型。
PDOを使ってMySQLへ接続
PDOを使ってMySQLへ接続し、データを取得する方法の解説です。
データの加工と表示
PDOでデータベースから取得したデータを加工して表示する方法の解説です。
HTMLフォームのデータ受け取りと表示
HTMLで作ったフォームからのデータの受け取り方法と、その表示方法の解説です。
タイトルとURLをコピーしました