PHP中的点运算符
直到今天有人问我一个问题之前,我一直以为我对PHP中的点运算符,php,operators,Php,Operators,直到今天有人问我一个问题之前,我一直以为我对已经很了解了。问题看起来很简单: echo 100...100; 乍一看,我认为这会造成语法错误。但是当我运行代码并看到结果时,我完全困惑了。结果是 1000.1 所以我想知道这是怎么发生的 谢谢。这样读: (100.) . (.100) 因此,它包含100和0.1您可以将其理解为echo 100。0.1假设您的意思是 echo 100...100; 这是因为PHP的美妙之处。:) 本声明被理解为 100. . .100 这相当于 100.0
已经很了解了。问题看起来很简单:
echo 100...100;
乍一看,我认为这会造成语法错误。但是当我运行代码并看到结果时,我完全困惑了。结果是
1000.1
所以我想知道这是怎么发生的
谢谢。这样读:
(100.) . (.100)
因此,它包含
100
和0.1
您可以将其理解为echo 100。0.1
假设您的意思是
echo 100...100;
这是因为PHP的美妙之处。:)
本声明被理解为
100. . .100
这相当于
100.0 . 0.1
实际上,这只适用于没有引号的情况:
echo "100...100"; 100...100 << with quotes the . is just a char
echo 100 . 100; 100100 << two concatenated strings "100"
echo 100.100; 100.1 << 100.100 is just a number
echo 100...100; 1000.1 << what you asked
echo 100. . .100; 1000.1 << what PHP actually interprets
echo“100…100”;100…100@Gordon,排版错误修复,对不起,这不应该很接近。这是一个公平的新问题users@yes最后的投票源于OP之前修正了使问题变得虚假的打字错误。是的,它在修复之后不应该关闭。不,实际上,没有代码< 0 >代码>中间,它来自<代码> 1=0.1 。然后<代码>回声100。100 < /代码>应该是相同的结果,因为它等于<代码>(100)。(100)
?但它不是。cxy:显然100。
仅当字符串紧跟在之后时才会转换为字符串。否则将解析为100.0
@Spawn nope。使用100..100
是模棱两可的。这可能意味着100。100
(=>致命)或100。100
(=>1000.1)或100。100
(=>100100)<代码>100…100
不含糊。当解析器看到100..100
时,它必须在这三者之间做出选择,并显然选择致命的。@Gordon,似乎PHP将此解析为您的第一个(语法错误)。可能是因为小数点运算符的优先级高于串联运算符。
'1000.1'
echo "100...100"; 100...100 << with quotes the . is just a char
echo 100 . 100; 100100 << two concatenated strings "100"
echo 100.100; 100.1 << 100.100 is just a number
echo 100...100; 1000.1 << what you asked
echo 100. . .100; 1000.1 << what PHP actually interprets