PHP防止有关未定义的$ _POST的警告

时间:2015-02-19 07:35:20

标签: php

我有一个用PHP编写的函数,用于检查传入的参数是否已定义而非空:

Functions::check_required_parameters(array($_POST['id']));

问题是,如果没有设置$_POST['id'],PHP会发出警告。我可以在函数调用前使用@来使警告静音,但是使用@是不受欢迎的。有没有办法在不使用@且没有警告的情况下执行此操作?

我知道我也可以这样做:

if(isset($_POST['id'])) {
    Functions::check_required_parameters(array($_POST['id']));
} else {
    Error::show(400, "Missing required parameter.");
}

但是,这需要在每个地方添加3行代码Functions::check_required_parameters()

更新

以下是Functions::check_required_parameters()的定义:

    public static function check_required_parameters($params) {
        if(is_array($params)) {
            foreach($params as $param) {
                if(!isset($param) || empty($param)) {
                    if($param !== 0 && $param !== "0") {
                        Error::show(400, "Missing required parameter.");
                    }
                }
            }
        } else {
            if(!isset($params) || empty($params)) {
                if($param !== 0 && $param !== "0") {
                    Error::show(400, "Missing required parameter.");
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:2)

根据您的特定用例,我可能只是将check_required_pa​​rameters()函数的签名更改为以下内容,在函数内部移动检查isset:

check_required_parameters(array $arr, $key)

然后您可以按如下方式使用该功能:

check_required_parameters($_POST, 'id')

答案 1 :(得分:0)

您还可以执行以下操作:

Functions::check_required_parameters(array( 
  ( isset($_POST['id']) ? $_POST['id'] : 0 )
);

为了便于阅读,我自愿添加了换行符。

或者您也可以在任何其他操作之前拦截$ _POST数组,并检查它是否使用您给出的示例进行设置:

if( !isset($_POST['id'] ){
  $_POST['id'] = 0;
}