为什么一个人想要使用isset over!$ variableName

时间:2013-09-12 11:59:54

标签: php isset

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

例如:

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

他们俩不会被呼出吗?我被告知使用isset更好,但我不明白为什么。有人可以解释一下吗?

4 个答案:

答案 0 :(得分: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';
    }
?>

答案 1 :(得分:1)

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

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

此不存在的变量的值为null,因此结果相同,这意味着不会满足if条件并且代码将不会执行,但是您会收到此警告通知你是一个潜在的问题(它是)。

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

答案 2 :(得分:1)

未定义值

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

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

布尔值

如果$nametrue,则只有第二个if会输出echo

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

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

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

整数值

如果$name0,则第一个if将输出该名称未设置,但第二个if将返回true,因为变量$name已设定。因此更加一致。

结论

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

答案 3 :(得分:-1)

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

如果某个变量未设置unset(),则不再设置该变量。如果测试已设置为NULL的变量,isset()将返回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,所以在这两行中你会得到相同的结果,但第一行会显示未定义变量警告,因为没有$name变量,第二个是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';
    }

?>