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

Posted

技术标签:

【中文标题】数组上的PHP“如果为真”测试总是返回真?【英文标题】:PHP "If true" test on array always returns true? 【发布时间】: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 type comparisons 【参考方案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。

【讨论】:

以上是关于数组上的PHP“如果为真”测试总是返回真?的主要内容,如果未能解决你的问题,请参考以下文章

PHP数组函数

为啥我的碰撞测试总是返回“真”,为啥图像矩形的位置总是错误的 (0, 0)?

猫鼬总是返回空数组? [复制]

猫鼬总是返回空数组? [复制]

boolean(布尔型) 两个值:true(真)orfalse(假)

PHP会话根本不起作用