最好的方法是$ _GET ['example'] ==“somevalue”?

时间:2012-06-04 16:04:27

标签: php

if((isset($_GET[example]))&&($_GET['example']=='somevalue')){ ... }

OR

if((!empty($_GET[example]))&&($_GET['example']=='somevalue')){ ... }

或者只是

if($_GET['example']=='somevalue'){ ... }

我问为什么我看到很多例子,人们首先检查是否设置了$ _GET ['example']然后如果$ _GET ['example'] =='somevalue'(上面的第一个和第二个例子)。 我不明白为什么不使用最后的解决方案(如果$ _GET ['example'] =='somevalue'然后显然设置了$ _GET ['example']。

此问题涉及任何其他变量($ _POST,$ _SERVER,ecc)。

6 个答案:

答案 0 :(得分:8)

if((isset($_GET[example]))&&($_GET['example']=='somevalue')){ ... }

是正确的,你想知道“变量”存在(或被设置)以便使用它。空只是检查它是否有任何数据。 例如:

<?php
$foo= 0;

if (empty($foo)) { // True because $foo is empty
    echo '$foo is either 0, empty, or not set at all';
}

if (isset($foo)) { // True because $foo is set
    echo '$foo is set even though it is empty';
}

if (isset($var)) { // FALSE because $var was not declared before
   ...
}
?>

答案 1 :(得分:4)

issetempty之间的差异很微妙但很重要。单独使用时它们最相关。如果要检查变量是否存在且是一个真值(例如,任何不是所有空格或0的字符串),您可以互换使用。

何时使用isset

当知道变量是否已定义且非空时,请使用isset

if (isset($maybeExistsMaybeNull)) {
    // variable defined and is not NULL
}

何时使用!空

当重要的是知道变量是否被定义并且是真实的时候使用!empty

if (!empty($mightBeEmpty)) {
    // variable defined, and isn't "", " ", 0, "0" etc.
}

!empty是存在的一个很好的简写,是一种东西。

何时使用array_key_exists

当重要的是知道密钥是否存在且值是否不重要时,请使用array_key_exists

if (array_key_exists('something', $array)) {
    // $array['something'] exists, could be literally anything including null
}

何时不使用isset

如果您的代码如下所示:

if (isset($something) && $something) {
    // code is shorter with !empty
}

何时不使用!空

如果您的代码如下所示:

if (!empty($something) && $something === "") {
    // you meant isset. this is unreachable.
}

然后你正在编写无法执行的代码

抛出错误的代码容易出错

避免编写发出您忽略的通知/警告的代码。例如在问题中:

if((isset($_GET[example]))&&($_GET['example']=='somevalue')){ ... }

示例的第一个用法是未声明的常量。或者它是未声明的 - 如果你在代码中的其他地方有define('example', "foo");该怎么办。

if($_GET['example']=='somevalue'){ ... }

如果网址不包含?example=..,也会发出通知。

编写代码而不显示错误意味着您可以很容易地错过第一个错误。

在上下文中:isset和!empty等效

对于给出的示例,这两种语言结构的行为完全相同。

如果变量未定义,并且两者之间的性能没有可测量的差异,则不会出现一个人的行为与另一个不同的情况,也不会发出通知。

答案 2 :(得分:3)

正如其他人所说的那样,检查$ _GET和$ _POST之类的东西,你最好还是要用:

if ( isset($_GET['example']) && $_GET['example'] =='somevalue' ) {

// process data

}

所以你总是希望首先确保变量已经设置(并且没有设置为null)或换句话说存在。然后继续检查变量是否包含您期望的数据。如果你试图引用一个不存在的变量(通过不检查isset()),php会给你一个通知,说'未定义的变量......等等'。

如果您想知道某个变量是否已设置但是并不太关注您可以使用的内容:

if ( !empty($_GET['example']) ) {

// process data

}

但是我会注意在这方面对字符串使用empty(),因为对于像'0'或''这样的字符串数据,空行为会很奇怪。

所以我总是会做第一个,a)确保变量存在,b)是你期望的那样。

答案 3 :(得分:0)

这是你可能会做很多事情的事情,它有助于组合一个类/函数来处理这个检查,所以你不必每次都这样做。

function checkValue($key, $value) {
    if(array_key_exists($key, $_REQUEST)){
        if ($_REQUEST[$key] == $value) {
            return true;
        } else {
            return false;
        }

    } else {
        return false;
    }
}

我只是使用Request作为默认值而不是切换出来(尽管在某些情况下最好在POST和GET之间切换以确保安全性(imo))。

现在您可以在任何地方调用此功能 if(checkValue('Item','Tom')=== true){} etc

答案 4 :(得分:-1)

最佳

if((isset($_GET[example]))&&('somevalue'==$_GET['example'])){ ... }

之间的区别
'somevalue'==$_GET['example']

$_GET['example']=='somevalue'

如果您错误输入 == 并输入 = ,则第一个通知会引发错误通知您。

答案 5 :(得分:-1)

if((isset($_GET[example]))&&($_GET['example']=='somevalue')){ ... }