人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP5で自作の関数の引数を以下のコードのように連想配列か、通常の変数にするか悩んでます。

■連想配列
$birthday = array('year'=>2009,'month'=>10,'day'=>9);

function hoge($birthday) {
}

■通常の変数
$year = 2009; $month = 10; $day = 9;

function hoge($year,$month,$day) {
}

基本的に複数人で開発することを想定していますが、
プログラミングをする際、どちらがやりやすいでしょうか?

また、それぞれ考えられるメリット、デメリットがあれば教えてください。
よろしくお願いします。

#なお、URLのみの回答はご遠慮ください。

●質問者: xxmasaxx
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:hoge URL コード デメリット プログラミング
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● pahoo
●27ポイント ベストアンサー

function hoge($year,$month,$day) {

}

私だったら、上記の渡し方を選びます。

理由は、アプリケーション内で引数の数をチェックしなくて良いからです。


連想配列で渡す場合は、関数 hoge 内で、引き渡された連想配列の中に要素 year, month, day の3つが存在することをチェックする必要があります。それを行わないで、もし要素が足りなかったり要素名が間違っていたりすると、実行している最中にエラーが起きます。これは、結合テストを行うまで顕在化しないバグ(関数hogeを呼び出す側にバグがある)につながります。

一方、引数で3つを渡すようにしておけば、もし引数の数が足りなければ、スクリプトをロードした時点でエラーが発生します。これなら、単体テストで潰すことができます。


連想配列で渡すメリットは、引数の数も種類も不定である場合です。

良い例が思い浮かばないのですが、こういう処理の場合は、関数内で要素を調べて場合分けを行うはずなので、連想配列の中身をチェックするのと同じ事になります。

◎質問者からの返答

なるほど。参考になりました。

回答どうもありがとうございました。


2 ● nasu
●27ポイント

私なら通常の変数にします。

連想配列の場合、コーディング時にhoge関数の中で引数の$birthday配列のキーが何だったか確認しなきゃならない手間が増える。

また、連想配列のキーに'year','month','day'が存在する保証がないので、バグを誘発することになると思います。

複数人で開発をするのなら、尚更、連想配列の例のように関数以外のコードに強く依存するようなコーディングは望まれないのではないでしょうか。

普通の変数の場合、hoge関数の引数が明確であるし、関数を使う側も引数を強制されるのでよいのではないでしょうか。

要するに、連想配列を使うメリットは無いと。

私の場合$birthday配列を使わなければならない場合でも、hoge関数の引数は$year, $month, $dayとするようにして、

if(isset($birthday['year'], $birthday['month'], $birthday['day'])){

$ret = hoge($birthday['year'], $birthday['month'], $birthday['day']);

}else{

//エラー

}

とかにします。

◎質問者からの返答

遅くなりましたが回答ありがとうございます。

確かに連想配列だと存在チェックなど色々面倒になりますね。参考になります。


3 ● sphire
●26ポイント

「連想配列」の方が、関数の仕様の拡張に柔軟に対応可能でしょうね。

年+月+日ではなく、年+月+第1月曜日、みたいな指定も可能にしたい場合

「通常の変数」タイプだと引数を増やすしかありません。

◎質問者からの返答

拡張性がしやすいというのが連想配列のメリットですね。

回答どうも有り難うございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ