2017-10-18 2 views
1

引数を配列または個々の引数としてメソッドに渡す方が良いですか? 配列はメソッドをより柔軟に変更できると感じていますが、もちろんこれは継承を介しても可能ですが、データを少し不透明にします。特定の型の変数を処理するときに変数が非常に長くなることがあります。メソッド、しかし、より明確なメソッドのユーザーに?メソッドの引数を変数または配列として渡す

私の前提は正しいですか?

public function addToCart($sku, $itemPrice, $itemCost, $itemName, $itemColor ....) {} 

public function addToCart($itemArray, $userArray) {} 
+1

配列を使用するときに、値の型と妥当性をどのように保証するのですか? – PeeHaa

+0

一見すると、2つの配列ではなく、 'Item'と' User'オブジェクトのように見えます。より柔軟な第二のアプローチを好むだろうと言っています。 – DonCallisto

+0

あなたは[Dependency Injection](http://php-di.org/doc/understanding-di.html)でもっとうまくいくでしょう。特定の型のオブジェクトではなく、配列'addToCart(MyProduct $ product){...}' - 必要なデータを定義された形式で正確に取得できます。 – CD001

答えて

5

方法の全体のポイントは、できるだけ説明及び具体的にすることです。単純に配列を渡すだけでは、関数に送信されるものと、関数が機能するために必要なものを制御できません。これはすぐにエラーやバグにつながります。

メソッドが大きくなり過ぎるような状況に遭遇した場合は、あまりにも多くの関数を構築する可能性が最も高いです。関数はの1つをものする必要があります。それらを分割し、代わりに他の関数を呼び出す方法を学びます。

最後に、意味のある方法で接続されていない複数の別々の変数の代わりに、オブジェクトを渡してオブジェクトを渡す必要があります。この代わりに:

public function addToCart($sku, $itemPrice, $itemCost, $itemName, $itemColor ....) {} 

あなたはこのような何か行う必要があります。大きなプロジェクト、クラスやシステムを構築する方法を学ぶ

public function addToCart(Item $item) {} 

を困難な作業であり、そしてそれが権利を取得するために時間がかかります。経験豊富な建築家やプログラマーでも、時にはひどいクラスやメソッドを構築することがあります。ここでリファクタリングが重要です。配列や無限の引数を渡すなどのショートカットではなく、問題を解決するための最良の角度を見つけるために時間をかけてください。

+1

'$ item'が製品だと仮定すると' $ sku'が属性になることはかなり安全な賭けです。 – CD001

+0

@ CD001あなたは正しいです。私は簡単にするためにそれを削除しました。 – OptimusCrime

+0

これは簡単な質問ですが、PHPで使用しているコンテキストで静的型を使用できますか? (Item $ item) –

関連する問題