Php 为什么1…1评估为10.1?
我刚刚遇到了3v4l中的一个小PHP片段:Php 为什么1…1评估为10.1?,php,echo,ellipsis,Php,Echo,Ellipsis,我刚刚遇到了3v4l中的一个小PHP片段: 恐怕我不知道如何解释它的结果。为什么这被认为是有效的呢?因为它被解释为1。.1(1和0.1)因此你得到10.1点()在PHP中有两个角色: 作为十进制数字,当它是实数的一部分时,例如1.1。整数部分和小数部分在实数上都是可选的,但不能在同一时间。这意味着1.和.1在PHP中都是有效的实数,但不是数字 作为第一个。此运算符将两个字符串子表达式连接到一个较大的表达式中。较大表达式的值是子表达式的字符串值的串联。非字符串的子表达式在连接之前转换为字符串。 例
恐怕我不知道如何解释它的结果。为什么这被认为是有效的呢?因为它被解释为
1。
.1
(1
和0.1
)因此你得到10.1点()在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
使用大括号可以清楚地表明:
(1.)。(.1)
1.
被解释为1
是字符串连接
.1
被解释为0.1
所有这些都放在一个字符串中,即10.1
作为一个字符串
var\u dump(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
被视为4号和5号的串联,结果是10.1Uhm,我想。。。是splat接线员,干得不错。连接操作不是加号。似乎有道理,但PHP通常不使用点连接数字,但出于某种原因,这里是这样的。PHP按照您的指示执行。在这里,您可以告诉它连接
项。因为项目不是字符串-php将它们转换为字符串。没有“串联数字”这样的东西。串接字符串;在连接之前,数字首先转换为字符串。我刚刚尝试了echo 1/.1
,结果是10
。为什么即使只有一个,它仍然将两个整数连在一起呢?@Swellar1/.1
是除以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
后接
。注意:SO语法高亮显示使第一个点变红,而其他点变黑。我认为这是一个很好的暗示。如果最后一个点也是红色就好了,但总比没有好。从近3个月前开始:棘手的连接问题…应用大括号只有在你已经知道在哪里应用时才清楚。@pipe这就是为什么我展示了如何应用大括号。
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