if(isset($ var))和if($ var)之间的区别

时间:2011-04-16 20:33:25

标签: php

  

可能重复:
  Whats the difference between if(!Variable) and if(isset($variable)) ?

在Facebook的php API示例中,他们使用if($ var){//做某事}其他{//做别的事情} whick让我想到了if($ var)和if(isset($ var))的区别。第一个肯定看起来更整洁,但我肯定可以使用它吗?

5 个答案:

答案 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。