我刚刚面对了来自3v4l: https://3v4l.org/jmrZB的一小段 PHP 代码
echo 1...1; //10.1
恐怕我不知道该如何解释它的结果。为什么这被认为是有效的呢?
因为它被解释为 1. . .1(1和 0.1) ,所以你得到 10.1
1.
.
.1
1
0.1
10.1
点(.)在 PHP 中有两个角色:
1.1
1 . 1
'1' . '1'
'11'
表达式 1...1解析为 1. . .1。根据以上所述,1.和 .1是实数(1.0和 0.1) ,中间点(.)是字符串串联运算符。
1...1
1. . .1
1.0
当将数字转换为字符串时,PHP 使用此操作所需的最小字符量。如果一个实数只有整数部分,那么它表示为整数,没有小数点和小数。
这就是为什么 1. . .1与 '1' . '0.1'相同,表达式的最终值是 10.1。
'1' . '0.1'
解析器从左向右读取表达式。1告诉它一个数字从这里开始。1.是一个有效的实数,而 1..不是。它保持 1.作为一个数字,然后下一个点是连接运算符。下一个 .后跟一个数字,是另一个实数(.1)的开头。
1..
总之,1...1和 1. . .1是一样的。
使用大括号可以清楚地表明:
(1.) . (.1)
这一切都放入一个字符串是 10.1 就像一根绳子。
收益率
不同的行动。
1. <?php echo 1.1; ?> // gives simple 1.1 2. <?php echo 1...1; ?> // gives 10.1 3. <?php echo 1..'1'; ?> // gives 11 4. <?php var_dump(1.); ?> // gives 1 5. <?php var_dump(.1); ?> // gives 0.1
现在,我们奇怪的行动
echo 1...1
被视为4号和5号的串联,结果是10.1