可能重复:
Whats the difference between if(!Variable) and if(isset($variable)) ?
在Facebook的php API示例中,他们使用if($ var){//做某事}其他{//做别的事情} whick让我想到了if($ var)和if(isset($ var))的区别。第一个肯定看起来更整洁,但我肯定可以使用它吗?
答案 0 :(得分:15)
使用
if ($var)
您将测试$var
是否包含非假的值 - 1为真,123也是,...
有关被视为真或假的更多信息,您应该查看Converting to Boolean。
使用isset()
,您将测试是否已设置变量 - 即是否已向其写入任何非空值。
答案 1 :(得分:8)
不同之处在于isset
对于任何已声明/初始化为任何变量(除null之外)的变量都是真的。 if($var)
对于var的所有值都是正确的,而不是那些评估为false的值(0,'',null,false等)。
所以区别在于非空值,但仍然计算为false:0,''(空字符串),false,空数组等。
试试这个:
$var = ''; //or equivalently 0, false, ''
if(isset($var)) echo 'a';
if($var) echo 'b';
答案 2 :(得分:3)
isset将检查是否已设置变量,if($ var)是否检查变量是否为真。
if($ var)如果未设置变量则会发出警告,因此最佳做法是
if (isset($var) && $var)
将检查它是否已设置且确实如此
答案 3 :(得分:3)
这里的关键区别在于变量和值之间。您引用不同概念的两个代码项。
if (isset($var)) {
这将测试是否已设置变量。它唯一的其他检查是看$var
未设置为null
(因为这几乎等同于取消设置)。
if ($var) {
这会测试$var
引用的值是否真实。这可能看起来像一个奇怪的概念,但有时在PHP中会发生非直观的事情并进行比较。如果$var
的值在转换为布尔值时为true
,则条件将通过。有关转换为true
的内容以及转换为false
的内容列表,请参阅the manual。
通常都有使用两者的情况。因为isset
是一种语言特性而不是标准函数,所以您可以将任何变量名称传递给它,它不会引发错误。如果未定义变量,它将仅返回false
。但是,如果您尝试在该上下文之外使用非初始化变量,则会报告错误。
这就是为什么你经常会看到代码检查是否值 设置和 truthy:
if (isset($var) && $var) {
答案 4 :(得分:1)
if($ var)测试$ var的真值,而isset($ var)检查$ var是否已初始化。如果$ var尚未初始化,if($ var)将抛出通知“unknown variable var”。但isset将检查是否设置了$ var;如果初始化$ var,它将返回其值,否则返回false。