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

或者

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

要不就

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

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

这个问题是指任何其他变量( $_POST, $_SERVER, ecc )。

4

6 回答 6

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

是对的,您想知道“变量”是否存在(或已设置)才能使用它。Empty 只是检查它是否有任何类型的数据。例如:

<?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
   ...
}
?>
于 2012-06-04T16:10:40.140 回答
4

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

何时使用 isset

isset当知道变量是否已定义且不为空很重要时使用:

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

何时使用 !empty

!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
}

何时不使用 !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'){ ... }

如果 url 不包含?example=..那也将发出通知。

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

在上下文中: isset 和 !empty 是等价的

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

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

于 2012-06-04T16:49:23.580 回答
3

正如其他人所说的检查 $_GET 和 $_POST 之类的东西,您最好使用:

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

// process data

}

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

如果您想知道是否设置了变量但不太关心什么,那么您可以使用:

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

// process data

}

但在这方面,我会小心在字符串上使用 empty(),因为 empty 可能会在字符串数据(如 '0' 或 ' ' )时表现得很奇怪。

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

于 2012-06-04T16:30:30.167 回答
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

于 2012-06-04T16:46:19.030 回答
-1

最好的是

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

和...之间的不同

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

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

如果您输入错误==并改为输入=,第一个符号将引发错误以通知您。

于 2012-06-04T16:34:01.657 回答
-1
if((isset($_GET[example]))&&($_GET['example']=='somevalue')){ ... }
于 2012-06-04T16:38:34.493 回答