钥匙要点:
(int)((0.1 0.7) * 10)
字符串增量行为:in_array()
作为第三个参数)才能进行准确的结果。>
in_array()
true
true
浮点数不准确:浮点数不能完美地表示所有实数。 在看似准确的数字上的操作可能会导致微妙的错误。这不是PHP独有的;这是计算机算术的基本限制。 经典的文章“每个计算机科学家对浮点算术都应该了解什么”提供了深入的解释。 考虑此代码:
<code class="language-php"><?php echo (int) ((0.1 + 0.7) * 10); ?></code>字符串增量Quirks:
0.1 0.7
PHP的字符串增量行为与C等语言不同。
>以数字增量结束的字符串上的增量运算符(
)。如果以字母结尾,则最后一个字母会按字母顺序递增。 以非α数字字符结尾的字符串保持不变。 这种行为经常被忽略。>
和松散的比较:> PHP的宽松比较规则影响<code class="language-php"><?php $a = 'fact_2'; echo ++$a; // Output: fact_3 $a = '2nd_fact'; echo ++$a; // Output: 2nd_facu $a = 'a_fact'; echo ++$a; // Output: a_facu $a = 'a_fact?'; echo ++$a; // Output: a_fact? ?></code>
该函数返回
的非空字符串。 要执行严格的比较,请使用第三个参数:in_array()
结论:
这些例子突出了PHP中的潜在陷阱。 始终注意浮点精度限制,了解PHP的唯一字符串增量行为,并在处理数组时使用严格的比较,in_array()
避免出乎意料的结果。 对PHP类型处理的透彻理解对于编写强大而可预测的代码至关重要。
通过fotolia
图像 (FAQS部分在很大程度上重复了主内容,并且提供的FAQ与提出的三个奇怪事实无直接相关。)
以上是PHP主| 3个奇怪的PHP事实,您可能不知道的详细内容。更多信息请关注PHP中文网其他相关文章!