我想知道为什么有人要使用该函数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
。
如果$name
只是true
第二个if
将输出echo
.
if(!$name){
echo 'Name is not set';
}
if(isset($name) == false){
echo 'Returned false';
}
因此,isset
与您要从此条件中检索的内容更加一致。您只想查看是否$name
定义了值。
if $name
is0
第一个if
将输出 name 未设置,但第二个 if 将返回true
,因为变量$name
已设置。从而更加连贯。
isset
更好,因为它完全符合您想要检索的内容和您想要的内容。
函数确定变量是否已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';
}
?>