我刚刚询问了参数验证语法的标准做法。我目前正在使用PHP,但任何被认为是平台/语言无关的解决方案都会很棒。
截至目前,我知道两种非常常见的语法。例如(我的偏好):
function foo($a, $b, $c){
if(!$a){ throw new Exception(); }
if($b < 0){ throw new Exception(); }
if(!check($c)){ throw new Exception(); }
//do stuff with $a, $b, and $c
}
另外:
function foo($a, $b, $c){
if($a){
if($b >= 0){
if(check($c)){
//do stuff with $a, $b, and $c
}else{ throw new Exception(); }
}else{ throw new Exception(); }
}else{ throw new Exception(); }
}
在任何情况下,如果有人知道说明任何标准的文件或有关此的常见做法,我将非常感谢参考。
当然,个人偏好和意见更受欢迎,但推理您的选择将是一种资产。
答案 0 :(得分:6)
我更喜欢你给出的前一个例子有很多原因:
if
语句的性质而降低。我希望在方法开始时立即拥有所有先决条件按合同设计是确保满足某些条件的一般方法(通常通过断言),例如:
Assert.IsNotNull($a, '$a must not be null');
如果断言失败,则会抛出指定消息的异常。
使用相同的方法,您可以在方法结束时(后置条件)进行某些断言,以确保方法按预期执行。
答案 1 :(得分:1)
或者,将if一组测试组合在一个“if语句”中:
function foo($a, $b, $c) {
if ((!$a) ||
($b < 0) ||
(!check($c))) {
throw new Exception();
}
//do stuff with $a, $b, and $c
}