PHP - 自定义验证器函数和传递未设置的变量

时间:2016-05-10 14:46:49

标签: php validation error-handling warnings isset

我有一个自定义验证器函数,它检查传递变量的不同属性,包括变量isset()。但是,如果未设置该变量,则在调用验证器函数时会抛出警告。警告不会显示,脚本也会顺利运行,但我不希望我的错误日志与所有这些条目混杂在一起。

简单的解决方案是使用@为函数的所有调用添加前缀,但我不是出于显而易见的原因。或者,我可以从函数中删除isset()(或者我猜它),而是将isset()检查放在函数调用旁边。

我看不出这些是唯一的选择;如何防止这些警告被记录,我还能如何在验证器功能中执行isset()。我希望整体记录未定义的变量警告,而不是在调用此函数时。

以下是功能:

function validate_data($value, $required = false, $min = false, $max = false, $numeric = false, $email = false){
    if($required === true && (!isset($value) || strlen(trim($value)) < 1) ){
        return false;
    }
    if($min !== false && strlen(trim($value)) < $min){
        return false;
    }
    if($max !== false && strlen(trim($value)) > $max){
        return false;
    }
    if(strlen(trim($value)) > 0 && $numeric === true && (!is_numeric(trim($value)))){
        return false;
    }
    if(strlen(trim($value)) > 0 && $email === true && !filter_var(trim($value), FILTER_VALIDATE_EMAIL)){
        return false;
    }
    return true;
}//validate_data()

以下是一个示例电话:

if(!$someClassName->validate_data($var, true, false, false, false, false)){
    //Do some stuff
}

1 个答案:

答案 0 :(得分:1)

isset()empty()是特殊函数,它们在没有警告的情况下接受未定义的变量。你无法创建自己接受此功能的功能。

但是如果使用未定义的变量,则可能还有其他问题需要处理。即使php中不需要,也可以初始化所有变量。 (坏)解决方法可能是这样的:

if (!isset($var)) $var = null;