Php “为什么?”;10";==&引用;0xa";评估为真,但是;10";==&引用;012“;不';T
这些天我发现了这个奇怪的代码片段Php “为什么?”;10";==&引用;0xa";评估为真,但是;10";==&引用;012“;不';T,php,Php,这些天我发现了这个奇怪的代码片段“10”==“0xa”,它的计算结果是真的。我在文档中找到的最好的内容是: 变量的类型由使用该变量的上下文决定 但我在代码片段中没有看到任何整数上下文。在四处打听时,人们似乎接受了这一点。我听到的一种解释是PHP将它们作为数字进行比较。因此,我对10的一些有效表达式进行了数字比较(使用PHP-5.6.5): 如果将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都将转换为数字,并以数字进行比较 (我的重点) 编辑 数字sting是从函数返回布尔值tru
“10”==“0xa”
,它的计算结果是真的。我在文档中找到的最好的内容是:
变量的类型由使用该变量的上下文决定
但我在代码片段中没有看到任何整数上下文。在四处打听时,人们似乎接受了这一点。我听到的一种解释是PHP将它们作为数字进行比较。因此,我对10的一些有效表达式进行了数字比较(使用PHP-5.6.5):
如果将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都将转换为数字,并以数字进行比较
(我的重点)
编辑
数字sting是从函数返回布尔值true
查找给定变量是否为数字。数字字符串由可选符号、任意位数、可选小数部分和可选指数部分组成。因此+0123.45e6是一个有效的数值。也允许使用十六进制(例如0xf4c3b00c)、二进制(例如0b10100111001)、八进制(例如0777)表示法,但仅限于无符号、十进制和指数部分
如果将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都将转换为数字,并以数字进行比较
(我的重点)
编辑
数字sting是从函数返回布尔值true
查找给定变量是否为数字。数字字符串由可选符号、任意位数、可选小数部分和可选指数部分组成。因此+0123.45e6是一个有效的数值。也允许使用十六进制(例如0xf4c3b00c)、二进制(例如0b10100111001)、八进制(例如0777)表示法,但仅限于无符号、十进制和指数部分
@马库斯马尔库什非常松散。例如,“10abcode”仍然是一个数字字符串,而“abcde10”则不是。@MarkusMalkusch在PHP的世界中,他们是这样做的。“0b1010”
是十进制的二进制表示形式10
“012”
是十进制的八进制表示法10
对不起,我不太清楚。10的八进制表示是012。但是“012”==“10”
的计算结果不是真的。二进制文件也是如此。如果你发现了一个bug。。。。。你要求提供文件参考,我已经提供了,这就是记录在案的行为。。。。如果您觉得这是错误的,那么要做的就是在@MarkusMalkusch上非常松散地抛出一个bug。例如,“10abcode”仍然是一个数字字符串,而“abcde10”则不是。@MarkusMalkusch在PHP的世界中,他们是这样做的。“0b1010”
是十进制的二进制表示形式10
“012”
是十进制的八进制表示法10
对不起,我不太清楚。10的八进制表示是012。但是“012”==“10”
的计算结果不是真的。二进制文件也是如此。如果你发现了一个bug。。。。。你要求提供文件参考,我已经提供了,这就是记录在案的行为。。。。如果你觉得这是错误的,那么要做的就是在
<?php
var_dump(
0b1010, "10" == "0b1010", // false
012, "10" == "012", // false
0xa, "10" == "0xa", // true
1E+1, "10" == "1E+1", // true
1e1, "10" == "1e1", // true
10.0, "10" == "10.0", // true
+10, "10" == "+10" // true
);