LoginSignup
6
2

More than 3 years have passed since last update.

PHP 複数の戻り値を指定する

Last updated at Posted at 2019-10-16

はじめに

最近PHPにも触れる機会があり、「1つのメソッド内で戻り値を複数指定したいな〜」となったので自分用にメモしておきます。

returnで配列化、listで渡す

サンプルはこんな感じ。(食後のお飲み物はどちらになさいますか…)

sample1.php
private function drinks(){
  $drink1 = "coffee";
  $drink2 = "tea";

  return array($drink1, $drink2);
  //または return [$drink1, $drink2];
}

list($drink1, $drink2) = $this->drinks();

関数内→ return[]return array()で配列で複数の戻り値を指定
呼び出す側→ list()で各戻り値を変数に格納
という流れです。

複数の配列を戻り値に指定したい

複数の配列を戻り値にしたい場合はこんな感じになりますかね。

sample2.php
private function drinks(){
  $softDrinks = ["tapioca milk tea", "cheese tea", "banana juice"]; //原宿とかで流行っているらしき飲み物
  $alcoholicBeverages = ["beer", "wine", "whisky"];

  return [$softDrinks, $alcoholicBeverages];
  //または return array($softDrinks, $alcoholicBeverages);
}

list($softDrinks, $alcoholicBeverages) = $this->drinks();

やっていることはsample1と一緒。

新たに複数の配列を作成し戻り値に指定する

想定している例:
・menusテーブルがあり、name, category(1 =foods, 2 =drinksの2種), target(対象者。1 =all_ages, 2 =over_20)の3つのカラムがあるとする。
・既にcategoryが2、飲み物のみが戻り値にしていされているgetDrinksメソッドがあるとする。
getDrinksの戻り値から、target別に配列を作成して戻り値に指定する。

sample3.php
private function drinks(){
  //飲み物取得
  $drinks = $this->getDrinks();

  //戻り値に指定する、空の配列を用意
  $softDrinks = [];
  $alcoholicBeverages = [];

  //$drinksをループし、ターゲット別に各配列に追加していく
  foreach( $drinks as $drink ) {
    if( $drink['target'] == 1 ) {
      $softDrinks[] = $drink;
    } else {
      $alcoholicBeverages[] = $drink;
    }
  }
  //returnで配列化
  return [$softDrinks, $alcoholicBeverages]
}

list($softDrinks, $alcoholicBeverages) = $this->drinks();

PHPで配列に要素を追加するのも初めてだったので使ってみました。
returnとlistでやっていることは上2つの例と同じです。

まとめ

PHPで複数の戻り値を指定したい時は、
・関数内→ return[]return array()で配列で複数の戻り値を指定する
・呼び出す側→ list()で各戻り値を変数に格納する

普段はRailsを触ることが多いのですがPHPにも慣れていけたらなぁと思います。
(PHPからRailsに戻ると、たまに def public functionとか書きそうになってます。)

間違っている点等あればご指摘いただけますと幸いです。

6
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2