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