AssociatedParameter パターン
PHP では、パラメータの順序は関数定義で定義したとおりの順番で指定する必要があります。
foo($a,$b,$c);
function foo($a, $b, $c) {
//...
}
通常、関数の引数をあまり多くするのは推奨されません。まちがいの元だからです。
bar($a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l,$m,$n,$o,$p,$q,$r,$s,$t,$u,$v,$w,$x,$y,$z);//こんなのイヤ
ただ、そうは言っても、業務データはえてして大量の情報項目を持っているので、データ引き渡し用の専用オブジェクトを作ったりしても、面倒だしコード量もむやみに増えてうれしくありません。
ところで、PHP には、連想配列があります。
これを使うと、名前と値のペアを順序を意識せずに詰め込むことができます。
$buz = array(
"a" => $a,
"b" => $b,
"c" => $c,
//...いくつでも...
);
echo $buz["b"]; //$bの値が表示されます。
echo $buz["a"]; //$aの値が表示されます。
echo $buz["c"]; //$cの値が表示されます。
これを配列を関数の引数に使えば、引数の順番を気にしなくてすむようになります。
bar(array(
"a" => $a,
"b" => $b,
"c" => $c,
//...いくつでも...
"y" => $y,
"z" => $z,
));
配列を受け取る関数の側でも連想配列の名前をキーとして値を受け取るようにすれば、指定順序には関係なく、意図した引数を渡すことができます。
渡すときにも、引数の名前を明示して値を渡すので、順番をまちがって別の引数に渡すべき値を渡してしまうような間違いは予防できそうです。
bar(array(
"z" => $z,
"y" => $y,
//...いくつでも...順番はちがっても大丈夫
"c" => $c,
"b" => $b,
"a" => $a,
));//さっきの呼び出しと呼び出しの効果は同じになります。
大量の引数を受け取る可能性のある関数に使うと便利です。
このやりかたを、AssociatedParameter パターンと呼ぶことにします。勝手に。