php - 函数/方法参数验证标准

标签 php function arguments standards validation

我只是想了解参数验证语法的标准做法。我目前正在使用 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/

相关文章:

c - 函数 fopen(filename, "r") 在我的 Ubuntu 上不起作用

c - 我可以改变指针的功能吗?

c# - 如何使用 Timer.tick 事件处理程序发送 2 个整数参数

visual-studio - 如何在命令行参数中将解决方案文件夹作为参数传递(用于调试)?

php - soap 信封是如何生成的,为什么 .NET 和 php 客户端会生成/接收不同的 soap 信封?

php - 一个简单的 php/mysql 的 CPU 使用率

php - 如何正确查询MySQL数据库

php - Paypal Express Checkout集成在自定义php中

c++ - 错误 : Control reaches end of non-void function in C++ for selection sort function

C : send different structures for one function argument