字符串与整数的比较:不常见现象解释
在 PHP 中,比较字符串与整数有时会产生奇怪的结果。这种混乱源于 PHP 的松散比较行为,特别是在将字符串与值 0 进行比较时。
考虑以下代码:
$test1 = "d85d1d81b25614a3504a3d5601a9cb2e"; $test2 = "3581169b064f71be1630b321d3ca318f"; if ($test1 == 0) echo "Test 1 is Equal!?"; if ($test2 == 0) echo "Test 2 is Equal!?";
令人惊讶的是,这段代码的输出是:
Test 1 is Equal!?
为什么会出现这种情况?
根据关于字符串转换为数字的 PHP 文档,当在数字上下文中计算字符串时(例如比较),根据其内容将其转换为浮点数或整数。如果字符串包含“.”、“e”或“E”等字符,则将其视为浮点数。否则,它被视为整数。
在 $test1 的情况下,字符串不包含任何数字字符,因此被转换为整数值 0。这就是比较 $test1 == 0 计算结果的原因为 true。
为什么 $test2 不起作用?
$test2 也是以非数字字符开头,那么为什么不呢它也等于0?这是因为该字符串的开头包含字符“3”。根据 PHP 文档,有效的数字以符号(可选)开头,后跟数字。因此,$test2 被转换为值为 0 的浮点数,并且比较 $test2 == 0 的计算结果为 false。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3