PHP与==

PHP与==,php,Php,我是一个好奇的程序员。所以这些天我在PHP网站上阅读文档,这个链接是“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 considere

我是一个好奇的程序员。所以这些天我在PHP网站上阅读文档,这个链接是“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 ?
?>


你能帮我一下吗?我不明白为什么会有一些比较,我找不到任何解释。

好的,所以问题是你为什么想要这个。这是为了便于进行此类比较:

$count = 10;    
while($count){
    echo $count;
    $count--;
}
这允许您决定模拟计数的数字是否有任何内容

同样的情况也发生在
null
上,您可以轻松检查变量是否赋值

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

是原因

案例一将
array()
强制转换为布尔值,导致
false

这里解释了案例2和案例3,标量被转换为数组:

对于任何类型:整型、浮点型、字符串型、布尔型和资源型,将值转换为数组将生成一个包含索引为零的单个元素和转换后的标量值的数组。换句话说,(array)$scalarValue与array($scalarValue)完全相同

案例四在这里解释:

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


这都是关于类型杂耍,哪种类型比另一种类型赢

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

  • 当将布尔值(
    false
    )与某个值进行比较时,该值被转换为布尔值
    (bool)array()
    false
    ,因此
    false==false
    为true
  • 将另一个值与数组进行比较时,另一个值将转换为
    数组([0]=>value\u OF_other)
    (换句话说,转换为数组)。这意味着比较变成
    array(“”)=array()
    ,这是错误的
  • 与(2)相同<代码>数组(0)=array()为false
  • array(null)
    意味着只是一个没有任何内容的数组,因此
    array(null)==array()
    (这是您所做的比较),因此结果为真

  • 第5行缺少等号,不是吗?Php的等号逻辑是出了名的奇怪,但无论如何,您应该只使用===比较相似的对象。隐式转换是不需要的。你需要读一下@Alex,它们不是同一个问题。这个问题是什么。这个问题就是原因,这个问题很好地解释了这一点。这只是一种打字杂耍,在这里被问到了。投票关闭。那么您的意思是,
    $x==$someArray
    会将$x的值隐式转换为数组。为了进一步挖掘,为什么会发生这种情况?为什么不将数组隐式转换为
    $x
    类型?如何将数组转换为另一种类型?就像将标量转换为数组一样任意。@kojiro同意。我正在努力摆脱PHP的原因之一。我认为这是不可能的,会引入难以调试的错误,并且会导致(致命的)错误。为什么2-3的情况下,两者都被转换成一个数组,里面有一个元素,而不是转换成布尔值?为什么对数组的强制转换优先?我以为过程是这样的:'==Array()=(bool)'==(bool)Array()=true,但事实是:'==Array()=(Array)'==Array()=Array('''==Array()=false那么,如果你说“'==Array()”与“arary(''==Array()”相同,为什么'==Array('')是false呢?根据你的理论,这是真的数组(“”)->数组(“”)=数组(“”)->true。但事实并非如此true@JoãoSilva“”将转换为areay(“”)(即一个包含一个元素的数组)。这不等于array()(元素为零的数组)