3

我想知道为什么有人要使用该函数isset!不是说变量未设置或不存在。

例如:

<?php
    if(!$name){
        echo 'Name is not set';
    }
    if(isset($name) == false){
        echo 'Returned false';
    }
?>

他们两个不会被呼应吗?有人告诉我使用isset更好,但我不明白为什么。有人可以解释吗?

4

4 回答 4

3

如果我们直接使用 $variableName 并且在检查之前没有定义 $variableName ,那么php 将生成一个未定义的变量警告。如果我们使用 isset,那么如果之前定义了变量,那么设置 isset 将返回 true,如果未定义,则 isset 将返回 false,因此不会生成未定义变量或索引警告。

如果存在之前未定义的情况,最好将 isset 与变量一起使用。

<?php
    if(!$name){   //this will generate a warning
        echo 'Name is not set';
    }
    if(isset($name) == false){   //this will not as isset returns false
        echo 'Returned false';
    }
?>
于 2013-09-12T12:03:08.443 回答
1

如果变量不存在并且您尝试访问它,则会生成警告:

if ($foo) ... // E_NOTICE: Undefined variable foo

这个不存在的变量的值是null所以结果是一样的,这意味着if条件不会被满足并且代码不会执行,但是你会收到这个警告,通知你一个潜在的问题(确实是这样)。

您用于isset测试变量是否存在而不触发错误。您应该只将它用于您确实无法确定的变量。如果应在代码中的某个位置设置变量,则不需要isset; 如果变量不存在,则需要警告通知。

于 2013-09-12T13:14:29.720 回答
1

未定义值

如果$name未定义,第一个if将输出警告并返回false。( E_NOTICE)

第二个if将正常运行并将返回false

布尔值

如果$name只是true第二个if将输出echo.

if(!$name){
    echo 'Name is not set';
}

if(isset($name) == false){
    echo 'Returned false';
}

因此,isset与您要从此条件中检索的内容更加一致。您只想查看是否$name定义了值。

整数值

if $nameis0第一个if将输出 name 未设置,但第二个 if 将返回true,因为变量$name已设置。从而更加连贯。

结论

isset更好,因为它完全符合您想要检索的内容和您想要的内容。

于 2013-09-12T13:45:48.980 回答
-1

函数确定变量是否已isset()设置且不为 NULL。

如果一个变量已经用 取消设置unset(),它将不再被设置。isset()如果测试已设置为 NULL 的变量,将返回 FALSE。另请注意,NULL 字节("\0")不等同于 PHP NULL 常量。

如果提供了多个参数,则isset()只有在设置了所有参数时才会返回 TRUE。评估从左到右进行,并在遇到未设置的变量时立即停止。

如果你不使用isset()脚本会产生一个警告,isset()你可以防止这种情况发生。

例如,使用的原因isset()是检测键是否在数组内。

例如:

<?php

$a = array ('test' => 1, 'hello' => NULL, 'pie' => array('a' => 'apple'));

var_dump(isset($a['test']));            // TRUE
var_dump(isset($a['foo']));             // FALSE
var_dump(isset($a['hello']));           // FALSE

// The key 'hello' equals NULL so is considered unset
// If you want to check for NULL key values then try: 
var_dump(array_key_exists('hello', $a)); // TRUE

// Checking deeper array values
var_dump(isset($a['pie']['a']));        // TRUE
var_dump(isset($a['pie']['b']));        // FALSE
var_dump(isset($a['cake']['a']['b']));  // FALSE

 if(!$a['hello']){   //this will display a warning: Undefined variable.
    echo 'hello is not set in the array';
}
?>

您的示例的问题是!PHP 中的运算符是NOT,因此在这两个 if 行中,您将得到相同的结果,但第一行将显示Undefined variable 警告,因为没有$name变量,第二个 if 将对变量NOT执行$name

<?php
    if(!$name){//this will display a warning: Undefined variable.
        echo 'Name is not set';
    }

     $name=0;
     if(!$name){//check the not value of $name.
        echo 'Name is true';
    }

?>
于 2013-09-12T12:03:38.070 回答