次のように、PHP でオプションのパラメーターの型を確認しています。
/**
* Get players in the team using limit and
* offset.
*
*
* @param TeamInterface $participant
* @param int $limit
* @param int $offset
* @throws \InvalidArgumentException
* @return Players of a team
*/
public function getPlayers(TeamInterface $team, $limit = null, $offset = null)
{
if (func_num_args() === 2 && !is_int($limit) ){
throw new \InvalidArgumentException(sprintf('"Limit" should be of int type, "%s" given respectively.', gettype($limit)));
}
if (func_num_args() === 3 && (!is_int($limit) || !is_int($offset))){
throw new \InvalidArgumentException(sprintf('"Limit" and "Offset" should be of int type, "%s" and "%s" given respectively.', gettype($limit), gettype($offset)));
}
//.....
}
これは機能しますが、これには 2 つの主な問題があります。
1/ 同じ型の 4/5 オプション パラメータの型をチェックする必要がある場合int
、コードが不必要に長くなります。このコードをより保守しやすくする方法はありますか? (おそらく、 と の両方の同じタイプをチェックするために 1 つのステートメントのみを使用しif
ます)$limit
$offset
2/getPlayers($team, 2, null)
例外をスローします。null
関数が実際にここで値を処理できることを知っていれば、これで問題ありませんか?