PHP中isset($string)
和@$string
之间有什么不同?
这有两种方式,那么区别是什么?
if(isset($string))
....
if(@$string)
....
答案 0 :(得分:6)
isset
,则 true
为null
。
@$var
true
如果$var
的价值为true
,则为!== null
。* /
== true
和@$var
匹配不同的值。
对于$var
,如果@
不存在,则会在内部生成错误并引发错误,并通过null
抑制其输出。这是一个更昂贵的操作,它可能会在途中触发自定义的错误处理程序。如果有替代方案,请不要使用它。
*不存在的变量值由false
替换,等于{{1}}。
答案 1 :(得分:2)
使用isset($str)
与@$str
不一样。
isset($str)
is set and is not null,则 $str
为真
如果@$str
为truthy,则$str
为真。
考虑以下示例:
$str = "0";
if (isset($str)) {
// This gets printed because $str is set
echo "Str is set" . PHP_EOL;
}
if (@$str) {
// This is NOT printed because $str is falsy
echo "Str is truthy" . PHP_EOL;
}
还应该注意@
,除了是一个坏习惯,还会招致significant performance penalty。
答案 2 :(得分:1)
函数isset()
检查变量,如果变量存在则返回true。签名@
忽略错误。给出几乎相同的值。下一个代码可能会显示出来:
if(isset($string))
print 1; // no print
if(@$string)
print 2; // no print
$string = false;
if(isset($string))
print 3; // print 3
if(@$string)
print 4; // no print