7

7 つのパラメーターなど、多数のパラメーターを渡す必要がある関数がある場合は、次のようにすることをお勧めします。

function foo($par1, $par2, $par3, $par4, $par5, $par6, $par7)
{
}

また

function foo(array $args)
{
}

2 番目の例$argsでは、パラメーターを要素として持つ配列になります。

私は両方の方法を一貫して使用していません。

最初の方法を使用することの欠点は、パラメーターの順序を間違えると、失敗することです (また、常に明らかであるとは限らないため、デバッグが非常に困難になる可能性があります)。これが配列メソッドを使用する利点です。

最初のタイプを使用する利点 (IMHO) は、PhpStorm などの優れた PHP エディターが、関数を入力しているときにパラメーターの名前を表示することです。これは、関数に移動して、どのパラメーターを渡す必要があるかを確認するよりも簡単です。配列で。

あなたのアドバイスに感謝します。

4

3 に答える 3

7

理論的には、各パラメーターは論理的な全体を包含する必要があります。コレクションは、メソッド パラメーターの集合体ではなく、値のコレクションを表すことを意図しています。メソッドの目的を明確に示すために、個々のパラメータを個別に渡す必要があります。

実際には、配列でパラメーターを渡す場合、正しいパラメーターが渡されたことを確認するために、大量の手動チェックを行う必要があります。パラメータに明確で論理的な名前 (および可能な場合はタイプヒント) を与えることで、あいまいさをほぼ回避できます。また、コメントが既に述べたように、メソッドが 7 つのパラメーターを受け取る場合、おそらくリファクタリングの機が熟しています。

編集: メソッド/関数、コードの動作にマイナーな方法でのみ影響する漠然と定義された一連の「オプション」を受け入れる場合は、Symfony OptionsResolverコンポーネントを使用して、オプション配列の検証を大幅に容易にすることを検討してください。

于 2012-09-25T20:56:43.870 に答える
1

この質問は、「phpはどのくらい強いタイプですか?」に要約されると思います。または「自分のものをどれだけ強くタイプしたいですか?」

明らかに、アレイは最も緩く結合されています。変数の数とその名前は、呼び出し元まで完全です。

個別のパラメーターを使用した呼び出しは、もう少し強力に結合されているため、少なくともパラメーターの数を指定する必要があります。

私見あなたは1つのタイプの呼び出しを忘れました、そしてそれはtype hintingです。これは、現時点でphpが提供する最も強力な強い型付けの方法です。

例:

function foo(\MyNamespace\MyObject $par1, \YourNamespace\YourObject $par2)
{
}

私の意見:私の背景は強い型の言語だけなので、強い型の方が好きtyped hintingです。php5.5またはphp6もタイプヒントとしてスカラーをサポートするという噂があります。

于 2012-09-25T20:59:59.900 に答える
0

引数に基づく多くのオプションがある場合、またはより柔軟性が必要な場合は、 を試してくださいfunc_get_args()

function foo()
{
    $arg_list = func_get_args();
    for ($i = 0; $i < $numargs; $i++) {
        echo "Argument $i is: " . $arg_list[$i] . "<br />\n";
    }
}

受け入れ可能な引数を絞り込みたい場合は、変数を定義するのが最善です。

于 2012-09-25T20:56:54.213 に答える