在Facebook的php API示例中,他们使用if($var){ // do something } else { // do something else},这让我想到了if($var)和if(isset($var))之间的区别。第一个看起来更整洁,但我肯定可以使用它吗?
在Facebook的php API示例中,他们使用if($var){ // do something } else { // do something else},这让我想到了if($var)和if(isset($var))之间的区别。第一个看起来更整洁,但我肯定可以使用它吗?
区别在于isset
对于任何已声明/初始化为除null外的任何变量都会返回true。而if($var)
只对非false值的变量(除了0、''(空字符串)、null、false等)返回true。
因此,其区别体现在对于不是null但仍然被认为是false的值:0、''(空字符串)、false、空数组等。
试试这个:
$var = ''; //or equivalently 0, false, ''
if(isset($var)) echo 'a';
if($var) echo 'b';
isset函数用于检查变量是否已经被设置,而if ($var)语句则用于检查变量的值是否为真。
如果使用if ($var)语句时变量未被设置,则会产生警告,因此最好采用isset函数进行检查。
if (isset($var) && $var)
这将检查它是否被设置并且为真
这里的关键区别在于变量和值之间。你提到的两个代码项指代不同的概念。
if (isset($var)) {
这个测试用于检查变量是否已经被设置。它所做的唯一其他检查是检查$var
是否未设置为null
(因为这几乎等同于取消设置它)。
if ($var) {
这个测试用于检查$var
引用的值是否为真。这可能看起来像一个奇怪的概念,但有时在PHP中比较会发生非直观的事情。如果$var
的值在转换为布尔值时为任何true
,则条件将通过。请参阅手册以获取转换为true
和转换为false
的列表。
通常有使用两者的情况。因为isset
是一种语言特性而不是标准函数,所以您可以向其传递任何变量名称,它不会抛出错误。如果变量未定义,则仅返回false
。但是,如果您尝试在该上下文之外使用未初始化的变量,则会报告错误。
这就是为什么您经常会看到检查值是否同时设置和为真的代码:
if (isset($var) && $var) {
if($var)测试$var的真值,而isset($var)检查$var是否已经初始化。如果$var没有被初始化,if($var)会抛出一个“未知变量var”的通知。但是isset将检查$var是否设置;如果$var已经初始化,它会返回它的值,否则返回false。