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

use*_*967 1 php arrays boolean return

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

$array = ['test' => 'test'];
if ($array == true)
  {
  echo 'true';
  }
Run Code Online (Sandbox Code Playgroud)

我也用字符串尝试了同样的方法:

$string = 'string';
if ($string == true)
  {
  echo 'true';
  }
Run Code Online (Sandbox Code Playgroud)

并且两者都呼应真实。

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

max*_*xhb 5

这是手册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
Run Code Online (Sandbox Code Playgroud)

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

另一方面,isset()无论变量的实际值如何,它都会确定是否定义了变量。唯一不同的值是null. 同值的变量null如果与测试将返回false isset()