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

14
5个回答

18

使用

if ($var)

您将测试$var是否包含一个非假值-- 1是真的,123也是。

关于什么被认为是真或假的更多信息,您应该查看转换为布尔型


使用isset(),您将测试变量是否已设置--即是否已写入任何非空值。


9

区别在于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';

3

isset函数用于检查变量是否已经被设置,而if ($var)语句则用于检查变量的值是否为真。

如果使用if ($var)语句时变量未被设置,则会产生警告,因此最好采用isset函数进行检查。

if (isset($var) && $var)

这将检查它是否被设置并且为真


2

这里的关键区别在于变量之间。你提到的两个代码项指代不同的概念。

if (isset($var)) {

这个测试用于检查变量是否已经被设置。它所做的唯一其他检查是检查$var是否未设置为null(因为这几乎等同于取消设置它)。

if ($var) {

这个测试用于检查$var引用的值是否为真。这可能看起来像一个奇怪的概念,但有时在PHP中比较会发生非直观的事情。如果$var的值在转换为布尔值时为任何true,则条件将通过。请参阅手册以获取转换为true和转换为false的列表。

最后

通常有使用两者的情况。因为isset是一种语言特性而不是标准函数,所以您可以向其传递任何变量名称,它不会抛出错误。如果变量未定义,则仅返回false。但是,如果您尝试在该上下文之外使用未初始化的变量,则会报告错误。

这就是为什么您经常会看到检查值是否同时设置为真的代码:

if (isset($var) && $var) {

1

if($var)测试$var的真值,而isset($var)检查$var是否已经初始化。如果$var没有被初始化,if($var)会抛出一个“未知变量var”的通知。但是isset将检查$var是否设置;如果$var已经初始化,它会返回它的值,否则返回false。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接