函数/方法参数验证标准

Dan*_*ugg 10 php validation standards arguments function

我只是在询问参数验证语法的标准实践.我目前正在使用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

}
Run Code Online (Sandbox Code Playgroud)

另外:

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(); }
}
Run Code Online (Sandbox Code Playgroud)

在任何情况下,如果有人知道文档说明任何类型的标准,或相关的常见做法,我将非常感谢参考.

当然,个人偏好和意见更受欢迎,但推理您的选择将是一种资产.

Mic*_*ins 6

我更喜欢你给出的前一个例子有很多原因:

  • 代码不会像嵌套的if语句那样不必要地缩进.
  • 嵌套的if语句可以将一堆复杂的分支添加到逻辑流中,这很难管理
  • 根据if陈述的性质,先决条件会降低.我更喜欢在方法开始时立即拥有所有前提条件

按合同设计是确保满足某些条件(通常通过断言)的一般方法,例如:

Assert.IsNotNull($a, '$a must not be null');
Run Code Online (Sandbox Code Playgroud)

如果断言失败,则抛出指定消息的异常.

使用相同的方法,您可以在方法结束时(后置条件)进行某些断言,以确保方法按预期执行.