名前付きパラメーターを渡すのに連想配列を使用することをお勧めしますが、それらを抽出せずに配列内に保持することをお勧めします。
function myFunc(array $args) {
echo "Hi, " . $args['name'];
// etc
}
これにはいくつかの理由があります。その関数を見ると、関数に渡された引数の1つを参照していることがはっきりとわかります。あなたがそれらを抽出し、extract()
に気付かない場合、あなた(または次の男)は、この "$name
"変数がどこから来たのか疑問に思ってあなたの頭を傷つけるでしょう。 を実行してもがローカル変数への引数を抽出していることが分かっていても、それはまだある程度の推測ゲームです。
第2に、他のコードがargsを上書きしないことを保証します。 $foo
と$bar
という名前の引数しか持たないことを期待して関数を書いたかもしれないので、他のコードでは例えば$baz = 8;
と定義します。後で "baz"という新しいパラメータを取るように関数を拡張したいかもしれませんが、他の変数を変更するのを忘れてしまいます。引数に何が渡されても、常に0に設定されます。
(これらは配列に抽出するか、残しての方法にも同様に適用されます)あまりにも配列を使用するいくつかの利点があります:あなたは$defaults
と呼ばれる各関数の先頭に変数を設定することができます。
function myFunc (array $args) {
$default = array(
"name" => "John Doe",
"age" => "30"
);
// overwrite all the defaults with the arguments
$args = array_merge($defaults, $args);
// you *could* extract($args) here if you want
echo "Name: " . $args['name'] . ", Age: " . $args['age'];
}
myFunc(array("age" => 25)); // "Name: John Doe, Age: 25"
あなたも削除することもできます対応する$default
値を持たない$args
のすべてのアイテム。あなたが持っている変数を正確に知ることができます。
それをうまく扱う方法。私は執筆前にあなたの答えを読んでいないことを後悔します。 – Rolf