我想知道为什么有人想要使用函数isset
而不是!
来表示变量未设置或存在。
例如:
<?php
if(!$name){
echo 'Name is not set';
}
if(isset($name) == false){
echo 'Returned false';
}
?>
他们俩不会被呼出吗?我被告知使用isset
更好,但我不明白为什么。有人可以解释一下吗?
答案 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
。
如果$name
为true
,则只有第二个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
更好,因为它完全符合您想要检索的内容和您想要的内容。
答案 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';
}
?>