php - php中的简单参数验证

标签 php validation

每次您编写一些 php 函数或类方法时,检查输入参数并抛出异常,或触发错误或警告等是一个好习惯...

例如

<?php

function send_email($email, $subject, $body)
{
    if (empty($email)) {
        throw new InvalidArgumentException('Email should not be empty');
    }
    if (!is_string($email) || filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
        throw new InvalidArgumentException('Email format is invalid');
    }
    if (empty($subject)) {
        throw new InvalidArgumentException('Subject should not be empty');
    }
    if (!is_string($subject)) {
        throw new InvalidArgumentException('Subject must be a string');
    }
    if (empty($body)) {
        throw new InvalidArgumentException('Body should not be empty');
    }
    if (!is_string($body)) {
        throw new InvalidArgumentException('Body must be a string');
    }

    return mail($email, $subject, $body);
}

如您所见,此示例的大部分内容都包含验证代码,而只有一行有用的代码可以完成这项工作。 如果您想可靠地保护您的功能,您实际上需要编写大量代码。这很乏味。

我的问题是 - 有人知道一些轻松验证代码的好方法吗? 是否有任何库验证依赖于 PHP-DOC?例如:

<?php

/**
 * @param email $email
 * @param string $subject
 * @param string $body
 */
function send_email($email, $subject, $body)
{
    return mail($email, $subject, $body);
}

谢谢。

最佳答案

纯 PHP 中最简单的方法是使用断言来简化检查:

class Assert {

    public static function isString($var) {
        if (!is_string($var)) {
            throw new InvalidArgumentException('Argument is not a string');
        }
    }

}

function foo($string) {
    Assert::isString($string);
    ...
}

您可以通过自省(introspection)和/或调试回溯来修饰它,以在抛出的异常中包含更多信息。

关于php - php中的简单参数验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20442711/

相关文章:

php - 如果另一个执行 php 脚本,则阻止执行该脚本

jquery - 如何使用 jQuery 验证插件验证表单?

Java "sun.security.validator.ValidatorException: PKIX path building failed"证书验证错误

php - PHP 中动态 mysqli bind_param 参数的简单解决方案是什么?

php - Mysql NULL字段和php isset?

php - 提交表单后停止 JQuery 验证

php - 获取 php virtual() 响应头

javascript - 使用 Joi 和 nodeJS 验证嵌套对象中的唯一键对

asp.net - 自定义验证器不显示错误消息

jquery 验证插件 - 显示错误与清除错误的不同处理