为什么一个人会想使用isset而不是!$variableName


Why would a person want to use isset over just !$variableName

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

例如:

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

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

如果我们直接使用 $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';
    }
?>

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

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

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

您可以使用isset来测试变量是否存在,而不会触发错误。您应该只将其用于您确实无法确定的变量。如果应该在代码中的某个点设置变量,则不需要isset;如果变量在应该不存在时不存在,您希望收到警告通知。

未定义的值

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

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

布尔值

如果true $name则只有第二个if将输出echo

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

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

整数值

如果$name 0则第一个if将输出该名称未设置,但第二个 if 将返回true,因为变量$name已设置。因此更具连贯性。

结论

isset更好,因为它完全可以执行您想要检索的内容和您想要的内容。

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,所以在两个if行中你会得到相同的结果,但第一行会显示未定义的变量警告,因为没有$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';
    }
?>