PHP与==松散比较

时间:2014-01-01 18:08:53

标签: php

我是一个好奇的程序员。所以这些天我正在阅读PHP网站上的文档,这个链接是“PHP类型比较”http://www.php.net/manual/en/types.comparisons.php

我决定做一些练习来填补比较表,但有些答案我不明白为什么,例如:

<?php
var_dump(false == array()); // Okay, an empty array is considered false. True result
var_dump('' == array()); // false ? Why not true if an empty string is considered false ?
var_dump(0 == array()); // false ? Why ?
var_dump(null == array()); // true. Why ?
?>
你能帮我解决这个问题吗?我无法理解为什么有些比较,我找不到任何解释。

3 个答案:

答案 0 :(得分:1)

Here就是原因。

案例一会将array()强制转换为布尔值,从而产生false

这里解释了第二种情况和第三种情况,将标量转换为数组:

  

对于任何类型:integer,float,string,boolean和resource,将值转换为数组会产生一个数组,其中包含索引为零的单个元素以及已转换的标量值。换句话说,(array)$ scalarValue与array($ scalarValue)完全相同。

案例四在此解释:

  

将NULL转换为数组会导致空数组。

答案 1 :(得分:1)

所有关于类型杂耍,其类型胜过其他类型。

例如,当您将数字与字符串进行比较时,该数字始终会获胜,因此该字符串将转换为数字。所以"12abc" == 12在PHP中是正确的。

  1. 将布尔值(false)与某些东西进行比较时,会将某些内容转换为布尔值。 (bool) array()false,因此false == false为真。
  2. 将另一个值与数组进行比较时,另一个值将转换为array([0] => VALUE_OF_OTHER)(换句话说,转换为数组)。这意味着比较变为array('') == array(),这是假的
  3. 与(2)相同。 array(0) == array()是假的
  4. array(null)只是一个没有任何内容的数组,因此array(null) == array()(这是你所做的比较),所以结果是真的。

答案 2 :(得分:0)

好的,问题是为什么你想要这个。这是为了使这种比较变得容易:

$count = 10;    
while($count){
    echo $count;
    $count--;
}

这允许您决定是否对计数进行建模,是否有任何数字。

同样的事情发生在null,您可以轻松检查变量是否已分配值。

对于数组,它允许您检查数组是否为空。