首页 文章

为什么1 ... 1评估为10.1? [重复]

提问于
浏览
168

这个问题在这里已有答案:

我刚刚面对3v4l的一小段PHP片段:https://3v4l.org/jmrZB

echo 1...1; //10.1

而且我担心我不知道如何解释其结果 . 为什么这被认为是有效的?

4 回答

  • 45

    点( . )在PHP中有两个角色:

    • 作为十进制数字,当它是实数的一部分时,例如 1.1 . 对于实数 but not on the same time ,积分部分和小数部分都是可选的 . 这意味着 1..1 都是PHP中的有效实数,但 . 不是数字 .

    • 作为string concatenation operator . 此运算符将两个字符串子表达式连接到一个更大的表达式 . 较大表达式的值是子表达式的字符串值的串联 . 在串联之前,非字符串的子表达式将转换为字符串 .
      例如 . 1 . 1'1' . '1' 相同,其值为字符串 '11' .

    表达式 1...1 被解析为 1. . .1 . 根据上述说法, 1..1 是实数( 1.00.1 ),中间点( . )是字符串连接运算符 .

    将数字转换为字符串时,PHP使用此操作所需的最少字符数 . 如果实数只有整数部分,那么它将数字表示为整数,不带小数点和小数 .

    这就是 1. . .1'1' . '0.1' 相同的原因,表达式的最终值为 10.1 .

    为什么1 ... 1解析这种方式?

    解析器从左到右读取表达式 . 1 告诉它一个数字从那里开始 . 1. 是有效的实数,但 1.. 不是 . 它将 1. 保留为数字,然后下一个点是连接运算符 . 接下来是数字的下一个 . 是另一个实数( .1 )的开头 .

    总而言之, 1...11. . .1 相同 .

  • 222

    因为它被解释为 1. . .110.1 )所以你得到 10.1

  • 63

    应用大括号将清楚说明:

    (1.) . (.1)

    • 1. 被解释为 1

    • . 是字符串连接

    • .1 被解释为 0.1

    所有放入字符串的字符串都是 10.1 .

    var_dump(1...1) 收益率 string(4) "10.1"

  • 22

    不同的操作 .

    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

相关问题