【发布时间】:2010-10-14 21:30:12
【问题描述】:
我真的很困惑为什么这个操作有效。谁能解释一下?
$test1 = "d85d1d81b25614a3504a3d5601a9cb2e";
$test2 = "3581169b064f71be1630b321d3ca318f";
if ($test1 == 0)
echo "Test 1 is Equal!?";
if ($test2 == 0)
echo "Test 2 is Equal!?";
// Returns: Test 1 is Equal!?
为了澄清,我试图将字符串 "0" 与 $test 变量进行比较。我已经知道要修复我可以将0 包含在""s 中的代码
我想知道这是 PHP 错误、服务器错误还是某种有效操作。根据http://us3.php.net/types.comparisons,这不应该起作用。
编辑: 从头开始,显然它确实提到了字符串和 0 之间的松散比较是真的。但我还是不知道为什么。
编辑 2:我已经修改了我的问题,为什么 "3581169b064f71be1630b321d3ca318f" 的 $test2 值不起作用?
【问题讨论】:
-
哪个 $test 值不起作用?
-
如果你运行代码,它只会输出
Test 1 is Equal!? -
编辑 2:因为比较语句自动转换“3581169b064f71be1630b321d3ca318f”,并且当它以数字开头时,它转换为 int 并获取字符串的第一部分直到一个字母作为值。并且该比较 (3581169 == 0) 为 false
-
FWIW,printing
$test1 + 0和$test2 + 0的值会为正在发生的事情提供线索。或者,+$test1和+$test2的值(使用身份运算符)。
标签: php casting comparison