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


PHP prevent warning about undefined $_POST

我用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.");
}

但这需要在每个使用Functions::check_required_parameters()的地方添加3行代码。

更新

以下是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.");
                }
            }
        }
    }

根据您的特定用例,我可能只是将check_required_parameters()函数的签名更改为下面的,将isset的检查移到函数本身中:

check_required_parameters(array $arr, $key)

然后您可以使用以下功能:

check_required_parameters($_POST, 'id')

您还可以执行以下操作:

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

为了可读性,我自愿添加了换行符。

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

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