数组上的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“如果为真”测试总是返回真?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的碰撞测试总是返回“真”,为啥图像矩形的位置总是错误的 (0, 0)?