我是一个好奇的程序员。所以这些天我正在阅读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 ?
?>
你能帮我解决这个问题吗?我无法理解为什么有些比较,我找不到任何解释。
答案 0 :(得分:1)
Here就是原因。
案例一会将array()
强制转换为布尔值,从而产生false
。
这里解释了第二种情况和第三种情况,将标量转换为数组:
对于任何类型:integer,float,string,boolean和resource,将值转换为数组会产生一个数组,其中包含索引为零的单个元素以及已转换的标量值。换句话说,(array)$ scalarValue与array($ scalarValue)完全相同。
案例四在此解释:
将NULL转换为数组会导致空数组。
答案 1 :(得分:1)
所有关于类型杂耍,其类型胜过其他类型。
例如,当您将数字与字符串进行比较时,该数字始终会获胜,因此该字符串将转换为数字。所以"12abc" == 12
在PHP中是正确的。
false
)与某些东西进行比较时,会将某些内容转换为布尔值。 (bool) array()
为false
,因此false == false
为真。array([0] => VALUE_OF_OTHER)
(换句话说,转换为数组)。这意味着比较变为array('') == array()
,这是假的array(0) == array()
是假的array(null)
只是一个没有任何内容的数组,因此array(null) == array()
(这是你所做的比较),所以结果是真的。答案 2 :(得分:0)
好的,问题是为什么你想要这个。这是为了使这种比较变得容易:
$count = 10;
while($count){
echo $count;
$count--;
}
这允许您决定是否对计数进行建模,是否有任何数字。
同样的事情发生在null
,您可以轻松检查变量是否已分配值。
对于数组,它允许您检查数组是否为空。