2012-09-25 13 views
5

より良いやり方であるような7つのパラメータとして渡されるパラメータの数、必要とする機能がある。第二の例$argsパラメータの配列と個々のパラメータの配列をPHPの関数に渡しますか?

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

又は

function foo(array $args) 
{ 
} 

なりますパラメータを要素とする配列

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

最初の方法を使用することの不利な点は、パラメータの順序が間違っていると、あなたが悩んでいることです(いつも明白なわけではないので、デバッグするのが難しいかもしれません)。これは、配列メソッドを使用する利点です。

最初のタイプを使用する利点(IMHO)は、PhpStormなどの優れたPHPエディタでは、関数をタイプするときにパラメータの名前が表示されます配列に渡す必要があります。

あなたのアドバイスをお待ちしています。

+0

プロジェクトの文脈であなたのために働くもの。 –

+0

7つのパラメータを持つ関数を持っている場合は、おそらく多すぎる責任があります。 –

答えて

4

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

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

編集:あなたの方法/ファンクション場合は大幅にあなたのオプションの検証を容易にするために、コードはわずかなやり方で、symfonyのOptionsResolverコンポーネントを使用することを検討してないものに影響を与える漠然と定義された「オプション」のセットを受け入れるんアレイ。

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"; 
    } 
} 

受け入れ可能な引数を絞り込むには、変数を定義するのが最適です。

1

私はこの質問がになっていると思います。「phpはどのくらい強いのですか?」または「私のものがどれくらい強いタイプになっていますか?」

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

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

IMHOあなたは1種類の呼び出しを忘れました。これはtype hintingです。これは、今のところphpが提供する最も強力なタイピング方法です。

は例:

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

私の意見は:のみ、強い型付けの言語での私の背景と、私は強く型付けされたtyped hintingを好みます。 php 5.5やphp 6も型ヒントとしてスカラーをサポートするという噂があります。

関連する問題