8

如果您尝试读取“get”变量的值,如果该变量未在 URL 中设置,会发生什么情况。示例:您请求页面test.php,在该文件中它尝试读取 的值$_GET['message']。在这种情况下会发生什么?将值返回为''?

这是否意味着如果我总是期望输入一个值,并且不愿意接受 '' 的值,我可以做类似的事情

$foo = $_GET['bar'];
if($foo == ''){
  // Handle my 'error'
}
else
{
  // $foo should now have a value that I can work with
}

请记住我知道我可以使用isset($_GET['bar'])但我不只是想知道它是否已设置,我不在乎是否设置,我只关心它的值是否不仅仅是空的细绳。

4

5 回答 5

7

如果您不关心该值是否实际设置,则可以使用:

if (empty($_GET['bar']))
    // value is null, false, 0, '0' or an empty string (including whitespace).
于 2010-04-19T10:24:40.457 回答
6

如果您尝试访问不存在的数组项,则结果将为null.

$foo = $_GET['bar']; //$foo is now null

值得注意的是,如果您使用的是弱比较运算符 ==而不是严格比较===,那么''将被视为 null。

上述代码的缺点是,当您使用不存在的索引访问数组时,它会生成一个通知,这有点混乱。

因此,您应该在将包含的值分配给变量之前检查该值是否已设置。

if ( !isset($_GET['bar']) ){
    //handle error or assign default value to $foo
}else{
    $foo = $_GET['bar'];
}

如果您想要一个默认值,并且仅在 $_GET 值存在时替换该默认值,您可以使用条件运算符(向下滚动到“三元运算符”)

$foo = isset($_GET['bar']) ? $_GET['bar'] : 'default value';
于 2010-04-19T10:17:19.053 回答
1

这是我的做法。

$foo = ( isset( $_GET['bar'] ) ) ? $_GET['bar'] : false;

if(false === $foo){
   die( 'no Foo for your Bar' );
}

另一方面,您可能永远不会从 $_GET 获得真正的布尔值

于 2014-07-10T23:08:46.950 回答
0

如果我理解正确的话是:

$foo = $_GET['bar'];
if ((!isset($foo)) || $foo == '') {
//GET veriable not set, error
}
else {
// GET veriable set, code here.
}
于 2010-04-19T10:15:26.623 回答
0

另一种方法是使用 PHP 的filter_input函数:

$foo = filter_input(INPUT_GET, 'bar');
if (empty($foo)) {
    // Handle my 'error'
} else {
    // $foo should now have a value that I can worth with
}
于 2022-02-03T21:47:30.443 回答