我想知道为什么有人想在!
上使用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';
}
?>