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

时间:2010-04-19 10:05:13

标签: 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
}

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

4 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:6)

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

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

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

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

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

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

如果您想拥有默认值,并且仅在$ _GET值存在时替换该默认值,则可以使用conditional operator(向下滚动到“三元运算符”)

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

答案 2 :(得分:1)

我是这样做的。

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

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

作为一方,您可能永远不会从$ _GET

获得真正的布尔值

答案 3 :(得分:0)

如果我理解正确的话:

$foo = $_GET['bar'];
if ((!isset($foo)) || $foo == '') {
//GET veriable not set, error
}
else {
// GET veriable set, code here.
}