Php 为什么(";00e0";=";00e1";)的计算结果为真?
在PHP中,为什么下面语句的前两个值为truePhp 为什么(";00e0";=";00e1";)的计算结果为真?,php,Php,在PHP中,为什么下面语句的前两个值为true <?php if("00e0" == "00e1") { echo 'matches (a)'; } else { echo 'failed (a)'; } if("00e1" == "00e9") { echo 'matches (b)'; } else { echo 'failed (b)'; } if("00e2"
<?php
if("00e0" == "00e1") {
echo 'matches (a)';
} else {
echo 'failed (a)';
}
if("00e1" == "00e9") {
echo 'matches (b)';
} else {
echo 'failed (b)';
}
if("00e2" == "00ea") {
echo 'matches (c)';
} else {
echo 'failed (c)';
}
?>
“00e0”、“00e1”、“00e2”之间的任何字符串。。如果与另一个“00e(0-9)”字符串比较,“00e9”将给出true。这是因为作为有效浮点值的字符串被解释为有效浮点值 例如,
00e0
相当于0 x 100
,00e9
相当于0 x 109
,两者均为零,因此彼此相等
但是,由于00ea
不是有效的浮点数,因此对它的处理方式有所不同
您可以通过以下方式看到类似的效果:
echo "01e2" - "01e1";
它输出90
,因为它与1x102-1x101
或100-10
相同
这由(我的斜体字)支持:
如果将数字与字符串进行比较,或者比较涉及数字字符串,则会将每个字符串转换为数字,并以数字形式执行比较
该段链接解释了转换背后的规则,如果发生:
如果字符串不包含任何字符“.”、“e”或“e”,并且数值符合整数类型限制(由PHP_INT_MAX定义),则字符串将作为整数计算。在所有其他情况下,它将作为浮动进行评估
如果您想避免这种行为,第一个链接中有一条说明,说明您应该使用==
:
当比较为===或!==时,不会发生类型转换因为这涉及到比较类型和值
你的术语错了。这里没有“回报”。你说的是评估。PHP糟糕的另一个原因。两个明显不同的字符串是相等的。@Lego,我不喜欢PHP,但该语言有办法避免这种情况,根据我的更新,PHP爱好者无疑会知道这一点。因此,它在概念上与C中不正确的
if(str==“另一个字符串”)
没有什么不同,初学者经常使用它。@legostrmtroppr如果你想比较字符串是否相等,你显然要使用===not==。实际上,e
之前的部分被解释为八进制符号,0^x加x≥ 0总是0。@Gumbo,关于0^x
的一点是误导性的-它实际上是0*10^x
,尽管仍然是零,因为事实上你正在乘以零。但我不认为它是八进制的,它的语句echo“010e0”-0代码>为您提供10而不是8。它还声明它在封面下使用strtod
,不处理八进制。
echo "01e2" - "01e1";