【问题标题】:PHP "If true" test on array always returns true?数组上的PHP“如果为真”测试总是返回真?
【发布时间】:2016-07-16 18:30:05
【问题描述】:

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

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

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

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

两者都回显真实。

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

【问题讨论】:

  • 数组可以使用count(),如果为0则为false
  • if($array === true) 也检查 typeof
  • isset() 将检查变量是否存在,if($variable) 将检查 $variable 值是否为 0 或 false。
  • 声明 $variables 或空字符串将返回 true。除非您将 $variables 声明为 false。

标签: php arrays return boolean


【解决方案1】:

这是手册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。如果使用 isset() 进行测试,值为 null 的变量将返回 false。

【讨论】:

    猜你喜欢
    • 2017-09-17
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    相关资源
    最近更新 更多