2

在检查超全局$_GET$_POST特定键的值是否存在时,是否有一种方法以更简洁的方式包含以下功能?

if (isset($_POST['foo']) && $_POST['foo'] !== '') {
    // ...
}

即使值为空字符串,该isset()函数本身也会返回,所以我不能使用它。TRUE''

使用 just$_POST['foo'] !== ''本身就可以正常工作,但它会发出一个E_NOTICEfor undefined index,这是不可取的。

empty()函数返回TRUEvalue "0",这是一个有效值,所以我也不能使用它。

我是否遗漏了一些明显的东西,或者这真的是最好/唯一的方法吗?

4

3 回答 3

5

可能您正在寻找array_key_exists()

if (array_key_exists('foo', $_POST)){
    // will execute when $_POST['foo'] is set, even if to null, false, '' etc.
};

如果您不想匹配空字符串 ( ''),那么您的解决方案可能就足够了。上面的解决方案false仅在密钥不存在时为您提供。

于 2012-07-21T01:55:05.957 回答
2

您可以随时将E_NOTICE. 在这种情况下,如果未设置变量,您希望 aE_NOTICE被抛出(实际上,这是这里唯一可能的错误情况),因此可以安全地被静音。

if(@$_POST['foo'] != '') {

}
于 2012-07-21T02:05:46.847 回答
1

为什么不在脚本开头使用array_merge一次性完成整个帖子。

IE

$default = array('foo' => "2", 'bar' => 'Hello World');
$postValues = array_merge($default, $POST);

然后使用$postValues. 它isset在其余代码中无处不在,因为将使用默认值。

于 2012-07-21T02:15:24.160 回答