PHP“如果为true”对数组的测试总是返回true?

时间:2016-03-29 09:25:17

标签: php arrays return boolean

我有一个验证函数,如果验证通过,我想返回true,如果验证失败则返回错误数组。但是,当我检查函数是否返回true时,即使返回的值是数组,它也会返回true。为什么是这样?作为我的意思的另一个例子:

$array = ['test' => 'test'];
if ($array == true)
  {
  echo 'true';
  }

我也用字符串尝试了同样的事情:

$string = 'string';
if ($string == true)
  {
  echo 'true';
  }

两者都是真的。

这是为什么?如果我们能做到这一点,那么为什么我们需要isset()函数?

1 个答案:

答案 0 :(得分:4)

这是预期的行为,如手册http://php.net/manual/en/types.comparisons.php

中所述
Expression             gettype()  empty()   is_null()   isset() boolean
-----------------------------------------------------------------------
$x = array();          array      TRUE      FALSE       TRUE    FALSE
$x = array('a', 'b');  array      FALSE     FALSE       TRUE    TRUE
$x = "";               string     TRUE      FALSE       TRUE    FALSE
$x = "php";            string     FALSE     FALSE       TRUE    TRUE

因此,空字符串或数组将计算为false,非空字符串或数组将计算为true

另一方面,isset()将确定是否定义了变量而不管其实际值如何。唯一不同的值是null。如果使用null进行测试,则值为isset()的变量将返回false。