我只是想了解参数验证语法的标准做法。我目前正在使用 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(); }
}
无论如何,如果有人知道说明任何类型标准或与此相关的常见做法的文档,我将不胜感激。
当然,个人偏好和意见更受欢迎,但对您的选择进行推理将是一项 Assets 。
最佳答案
出于多种原因,我更喜欢您给出的前一个示例:
- 代码不会像嵌套 if 语句那样不必要地缩进。
- 嵌套的 if 语句会给逻辑流添加一堆复杂的分支,变得难以管理
- 根据
if
语句的性质,前提条件会降低。我更喜欢在方法开始时立即拥有所有先决条件
按契约(Contract)设计是确保满足某些条件(通常通过断言)的一般方法,例如:
Assert.IsNotNull($a, '$a must not be null');
如果断言失败,将抛出异常并显示指定消息。
使用相同的方法,您可以在方法的末尾(后置条件)进行某些断言,以确保方法按预期执行。
关于php - 函数/方法参数验证标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3393616/