Edited at

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


はじめに

最近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とか書きそうになってます。)

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