【PHP】戻り値として複数の値(変数)をreturnする方法【list関数を応用】

プログラミング

PHPで複数の値を返す方法を説明します。

list関数を応用する方法なのですが、めちゃくちゃ便利なので、よく使用しています。

最初に具体的に複数の値を返すためのコードを提示し、そのあとで、コードの内容について説明、という流れで書いていきます。

スポンサーリンク
スポンサーリンク

複数の変数を返すコード

<?php
namespace App\Libs;

class Common {
  // 複数の変数を受け取る側
  public function start () {
    list ($color_1, $color_2, $color_3) = get_color();
  
    // 値の確認(おまけ)
    echo ($color_1); // 「赤」を出力(PHP7.0以上)
    echo ($color_2); // 「青」を出力(PHP7.0以上)
    echo ($color_3); // 「黄色」を出力(PHP7.0以上)
  }

  # 複数の変数を返す側
  public function get_color () {
    $a = '赤';
    $b = '青';
    $c = '黄色';
    return [$a, $b, $c];
  }
}
?>

解説

複数の変数を返したいメソッド側では、返したい値を配列にセットしてreturnします。

一方、複数の変数を受け取りたいメソッド側では、list関数を利用して、配列を受け取っています。

list関数とは

配列の値を、変数に代入することができる関数です。

下記のように使用することができます。

<?php
// 配列の作成
$color_list = ['赤', '青', '黄色'];
// list関数を使用して、配列の値を3つの変数に代入
list ($color_1, $color_2, $color_3) = $color_list;
// 代入された値の確認
echo ($color_1); // 「赤」を出力(PHP7.0以上)
echo ($color_2); // 「青」を出力(PHP7.0以上)
echo ($color_3); // 「黄色」を出力(PHP7.0以上)

?>

この動きを応用し、メソッドを返す側を配列、メソッドの受け取り側をlist関数にすることで、今回の方法が実現できています。

list関数の注意点

今回紹介したコードを使用する際は、PHPのバージョンを必ず確認することをおすすめします。

list関数は、PHP7.0以降とPHP5.6以前で代入する順番が異なるためです。

PHP7.0以降では、配列の値を左の変数から順番に代入していく動きになっています。
一方で、PHP5.6以前では、配列の値を右の変数から順番に代入していく動きになっています。

つまり。上記のコードがPHP5.6以前の環境で実行されると、下記のように「$color_1」に入るのは、returnされた配列の先頭「赤」ではなく、配列の最後「黄色」になるのです。

<?php
// 配列の作成
$color_list = ['赤', '青', '黄色'];
// list関数を使用して、配列の値を3つの変数に代入
list ($color_1, $color_2, $color_3) = $color_list;
// 代入された値の確認
echo ($color_1); // 「黄色」を出力(PHP5.6以前)
echo ($color_2); // 「青」を出力(PHP5.6以前)
echo ($color_3); // 「赤」を出力(PHP5.6以前)

?>

バージョンが違うだけで動きが正反対になるという点で、注意が必要です。

まとめ

PHPバージョンによって挙動が異なるという注意点もあるlist関数ですが、うまく応用することでメソッドの戻り値を複数受け取ることができるようになります。

ぜひ使ってみてください。

コメント

タイトルとURLをコピーしました