gpt4 book ai didi

php - 不直观的递增表达式求值

转载 作者:IT王子 更新时间:2023-10-29 00:50:28 26 4
gpt4 key购买 nike

对于下面的代码

<?php

$a=1; $b=$a++; var_dump($b);
$a=1; $b=$a+$a++; var_dump($b);
$a=1; $b=$a+$a+$a++; var_dump($b);
$a=1; $b=$a+$a+$a+$a++; var_dump($b);
$a=1; $b=$a+$a+$a+$a+$a++; var_dump($b);

我得到了这个结果:

int(1)
int(3)
int(3)
int(4)
int(5)

我期望 1,2,3,4,5 而不是 1,3,3,4,5。为什么在 $a=1; 之后$b=$a+$a++; 我们得到 $b=3?

PHP 7.1.5-1+deb.sury.org~xenial+1 (cli) (built: May 11 2017 14:07:52) ( NTS )

最佳答案

$a=1;   $b=$a+$a++;           var_dump($b);            // int(3)

假设上面的表达式从左到右计算如下(临时变量 $u$v 在解释清楚):

 $a = 1;
$u = $a; // ($a) the LHS operand of `+`
$v = $a; // \ ($a++) the RHS operand of `+`
$a ++; // /
$b = $u + $v; // 2 (1+1)

但是不能保证子表达式会按照指定的顺序进行计算PHP operators 的文档页面状态(重点是我的):

Operator precedence and associativity only determine how expressions are grouped, they do not specify an order of evaluation. PHP does not (in the general case) specify in which order an expression is evaluated and code that assumes a specific order of evaluation should be avoided, because the behavior can change between versions of PHP or depending on the surrounding code.

PHP 为其他表达式计算的值仅与您假设的值相匹配。当使用不同版本的 PHP 解释器执行代码时,它们的值可能会有所不同。

关于php - 不直观的递增表达式求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46054682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com