我有一个用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.");
}
}
}
}
答案 0 :(得分:2)
根据您的特定用例,我可能只是将check_required_parameters()函数的签名更改为以下内容,在函数内部移动检查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;
}