2011年8月21日日曜日

phpで必須パラメータの指定忘れをチェック

phpでパラメータが多い関数を作るとき、このように引数をずらずら並べるのはいい方法ではありません。
function fooBar($name, $age, $mail, $sex, $state)
{
...
}
関数仕様が変更されたとき、呼び出し側のインパクトが大きいからです。phpはスクリプト言語のため、事前にコンパイルして引数の数が一致しているか検知することもできません。

この解決策として、パラメータをオブジェクトや連想配列で渡すように設計するのですが、今回は連想配列の一例です。

/**
 * パラメータチェックサンプル
 *
 * @param array 'name', 'age', 'sex', 'state'をキーにもつ連想配列
 */
function fooBar($params)
{
	$diff = checkEssentialParams($params, array('name', 'age', 'sex', 'state'));
	if (count($diff) > 0) {
		// $diffには不足しているパラメータ
		echo print_r($diff, true) . "パラメータが指定されていません。\n";
		return false;
	}
}
function checkEssentialParams($params, $essential)
{
	return array_diff($essential, array_keys($params));
}


fooBar(array("age" => 30));

checkEssentialParams関数の中で array_diff を使って連想配列中のキーのセット忘れをチェックしています。

実行結果

> php check_essential_params.php
Array
(
    [0] => name
    [2] => sex
    [3] => state
)
パラメータが指定されていません

0 件のコメント:

コメントを投稿