はじめに
最近PHPにも触れる機会があり、「1つのメソッド内で戻り値を複数指定したいな〜」となったので自分用にメモしておきます。
returnで配列化、listで渡す
サンプルはこんな感じ。(食後のお飲み物はどちらになさいますか…)
private function drinks(){
$drink1 = "coffee";
$drink2 = "tea";
return array($drink1, $drink2);
//または return [$drink1, $drink2];
}
list($drink1, $drink2) = $this->drinks();
関数内→ return[]
かreturn array()
で配列で複数の戻り値を指定
呼び出す側→ list()
で各戻り値を変数に格納
という流れです。
複数の配列を戻り値に指定したい
複数の配列を戻り値にしたい場合はこんな感じになりますかね。
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別に配列を作成して戻り値に指定する。
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
とか書きそうになってます。)
間違っている点等あればご指摘いただけますと幸いです。