PHPで関数から返り値を”複数返す”には…2つの方法

PHPにおいて関数を作るとき、

  • 1つ以上の返り値を返したい、
  • 呼出元でまとめて返り値を受けたい、

こういった 複数返り値のやり方 について。

方法は2つあるので、コード例付きで紹介します。

方法1.連想配列を関数から返すやり方

これはオーソドックで一般的なやり方です。

関数から配列(連想配列)を返す方法。

ちなみにPHPでは 配列 = 連想配列

具体的な例を出すと、次の通り

 

まず次みたいな関数があるとしましょう。

▼ 返り値を連想配列で返す関数

連想配列から返り値をまとめて返してるだけ。

この場合では配列の合計と平均を計算し、 'sum' => $sum  から合計を、 'avg' => $sum / count($nums)  から平均値を返すようにしてます。

 

あとは関数を呼び出して受け取るだけです。

▼ この関数の使い方・呼び出し例

ただ次の点がすこし不便かも

  • 返り値用の変数が増えてしまう
  • 少しだけコードが冗長になる

まあ気にするほどでもないですが・・・

この書き方が嫌いなら、別の方法もあります。

方法2.関数に返り値を参照渡しするやり方

PHPでは変数を参照渡しできます。

その参照渡しで複数返り値を返すやり方

参照渡し = リファレンス とも呼ぶ

詳しくは以下説明の通りです。

PHP において、リファレンスとは同じ変数の内容を異なった名前で コールすることを意味します。これは C のポインタとは異なります。 リファレンスを使ってポインタの演算をすることはできませんし、 リファレンスは実メモリのアドレスでもありません。

引用元 : https://www.php.net/manual/ja/language.references.whatare.php

参照(リファレンス)の詳細は上ページをチェック。

ここでは説明せず、複数返り値に利用する方法だけ説明します。

 

まず複数返り値を返す function を定義

▼ たとえばこのような関数

先と同じく合計&平均を返す関数

関数内では return  を一切使ってません。

代わりに &$sum  と &$avg  を参照渡ししてます。

このように参照渡ししておくと、関数内で $sum  , $avg  に行った変更が関数外でも保たれることができます。だから複数を返り値してるのと実質的に同じです。

 

あとは普通に関数を呼び出せばOK

▼ 関数の呼び出し方コード例

上コードの $sum  と $avg  に返り値が入ります。

あとは関数内で計算して、この2つに結果が入る訳ですね。

この方法は1つめと比べると・・・

  • 返り値用の変数を用意しなくて済む
  • 1行でスマートに結果を受け取れる
  • コードも冗長にならず少し短くできる

これだけのメリットもあります。

ただし、参照渡しだと以下の欠点もあるので注意。

  • 引数の数が多くなってしまう
  • コードが分かりにくくなる
  • 可変の返り値には対応できない

返り値が1個とか2個とか、固定なら有用かもです。

それ以外は連想配列を返す方法をオススメします。

蛇足.JavaScriptでの複数返り値について

ちなみにJavaScriptでも同じことはできます。

詳しくは次記事に書かれているのでチェック

JSだと柔軟な受け渡しもできて便利ですね。

複数返り値のやり方まとめ

ここまでで紹介した方法は次の2つ

連想配列を返した方が汎用性が高いと思います。

以上、PHPでの複数返り値についてでした。ではまた($・・)/~~~

PHP

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください