連想配列を使用して名前付きパラメーターを渡すことをお勧めしますが、それらを抽出せずに配列に保持します。
function myFunc(array $args) {
    echo "Hi, " . $args['name'];
    // etc
}
これにはいくつかの理由があります。この関数を見ると、関数に渡された引数の 1 つを参照していることがわかります。それらを抽出しても、extract()あなた (または次の人) は、この " $name" 変数がどこから来たのか疑問に思って頭をかきむしっていることに気付かないでしょう。引数をローカル変数に抽出していることはわかっていても、ある程度は推測ゲームです。
次に、他のコードが引数を上書きしないようにします。$fooおよびという名前の引数のみを期待して関数を作成した可能性がある$barため、他のコードでは$baz = 8;、たとえば を定義します。後で、関数を拡張して "baz" という新しいパラメーターを取りたいと思うかもしれませんが、他の変数を変更するのを忘れてしまうと、引数に何が渡されても、$baz常に 8 に設定されます。
配列を使用することにもいくつかの利点があります (これらは、配列を抽出または残す方法に等しく適用されます): と呼ばれる各関数の先頭に変数を設定できます$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"
$args対応する値がないすべてのアイテムを削除することもでき$defaultます。このようにして、どの変数があるかを正確に知ることができます。