【发布时间】:2017-12-21 17:30:13
【问题描述】:
【问题讨论】:
-
注意:SO 语法高亮显示第一个点为红色,而其他点为黑色。我认为这是一个很好的提示。如果最后一个点也是红色就好了,但总比没有好。
-
棘手的连接问题...
【问题讨论】:
点 (.) 在 PHP 中有两个作用:
1.1。对于实数,整数部分和小数部分都是可选的但不能同时选择。这意味着 1. 和 .1 在 PHP 中都是有效的实数,但 . 不是数字。1 . 1 与'1' . '1' 相同,其值为字符串'11'。表达式1...1 被解析为1. . .1。根据上面所说,1. 和 .1 是实数(1.0 和 0.1),中间的点(.)是字符串连接运算符。
将数字转换为字符串时,PHP 使用此操作所需的最少字符数。如果一个实数只有整数部分,那么它表示该数字为整数,没有小数点和小数。
这就是为什么1. . .1 与'1' . '0.1' 相同,表达式的最终值为10.1。
1...1会这样解析?解析器从左到右读取表达式。 1 告诉它一个数字从那里开始。 1. 是一个有效的实数,但 1.. 不是。它将1. 保留为数字,然后下一个点是连接运算符。下一个.,后面跟着一个数字,是另一个实数(.1)的开始。
总而言之,1...1 与 1. . .1 相同。
【讨论】:
echo 1/.1,结果是10。为什么即使只有一个.,它仍然会连接两个整数?
1/.1 是 divide 1 by 0.1 即 10。
1/.1 是一个数字。它是1 除以0.1。表达式1/.1 的值为10。不涉及字符串。
1..1和1..1.都不打印“11”?
1. 是一个浮点数而不是整数 1 后跟连接运算符 (.)。出于同样的原因,1..1 是 1. 后跟 .1 和 1..1. 是 1. 后跟 .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
【讨论】:
使用大括号会清楚:
(1.) . (.1)
1. 被解释为 1
. 是字符串连接
.1 被解释为0.1
这一切放入一个字符串是10.1作为一个字符串。
var_dump(1...1)yieldstring(4) "10.1"
【讨论】:
因为它被解释为1...1(1 和0.1)所以你得到10.1
【讨论】:
concatenate 项目。由于项目不是字符串 - php 将它们转换为字符串。