PHP读取'get'变量,可能已设置,也可能未设置

the*_*man 8 php get isset

如果您尝试读取'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
}
Run Code Online (Sandbox Code Playgroud)

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

eli*_*ias 7

如果您不关心实际设置的值,可以使用:

if (empty($_GET['bar']))
    // value is null, false, 0, '0' or an empty string (including whitespace).
Run Code Online (Sandbox Code Playgroud)


Yac*_*oby 6

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

$foo = $_GET['bar']; //$foo is now null
Run Code Online (Sandbox Code Playgroud)

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

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

因此,在将包含值分配给变量之前,应检查是否设置了值.

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

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

$foo = isset($_GET['bar']) ? $_GET['bar'] : 'default value';
Run Code Online (Sandbox Code Playgroud)