PHP 引数の多いメソッド対策
以下のように、同じような引数が羅列されているソースコードをよく見る。
<?php $this->getMemberAddress('秋元真夏', '乃木坂46', 'ソニーミュージック'); $this->getMemberAddress('白石麻衣', '乃木坂46', 'ソニーミュージック'); $this->getMemberAddress('山下美月', '乃木坂46', 'ソニーミュージック');
「乃木坂46、ソニーミュージック」
の部分が重複しており、大変見苦しい。
そういう時は、カリー化して、引数の数を減らしてやる。
<?php $curryingFunc = function($group, $company) { return function($name) use($group, $company) { return $this->getMemberAddress($name, $group, $company); }; } $getMemberAddressByName = $curryingFunc('乃木坂46', 'ソニーミュージック'); echo $getMemberAddressByName('秋元真夏'); // 東京都… echo $getMemberAddressByName('白石麻衣'); // 東京都… echo $getMemberAddressByName('山下美月'); // 東京都…
重複部分が無くなった。
以下のように、部分適用としても良い。
<?php $getMemberAddressByName = function($name) { return $this->getMemberAddress($name, '乃木坂46', 'ソニーミュージック'); }; echo $getMemberAddressByName('秋元真夏'); // 東京都… echo $getMemberAddressByName('白石麻衣'); // 東京都… echo $getMemberAddressByName('山下美月'); // 東京都…
引数が10個くらいあるメソッドを見てると、気が滅入ってくるよ。