php中赋值表达式的值,PHP表达式中含『++』或『--』时,变量赋值的时机

这篇博客讨论了PHP中运算符优先级和结合性如何决定表达式拆分,但不规定变量的赋值顺序。由于PHP在不同版本和上下文中可能有不同的求值行为,因此开发者应避免依赖特定的求值顺序。例如,`$a+$a++`这样的表达式在不同版本的PHP中可能产生2或3的结果,体现了PHP中未定义的求值顺序。建议在代码中避免使用多次出现相同变量的自增或自减操作,以确保代码的可预测性和一致性。
摘要由CSDN通过智能技术生成

来源

原文

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.

Example #2 Undefined order of evaluation

$a = 1;

echo $a + $a++; // may print either 2 or 3

$i = 1;

$array[$i] = $i++; // may set either index 1 or 2

?>

翻译

运算符的优先级和结合性可以用来帮我们对一个表达式进行拆解,但不指定赋值顺序。一般情况下,PHP不指定求值表达式的顺序。我们也应该避免使用这种基于特定求值顺序的代码。因为基于不同的PHP版本或关联代码,可能会有不同的产生不同的行为。

再解释

在 不同PHP版本在线测试工具 中,可以测试得到『$a + $a++』在 5.0.5 及以下版本中结果为 2,更高版本中,结果为 3 。

『++』的优先级是高于『+』,这是毋庸置疑的;而根据『++』的定义,$a 应该是使用了原值,再进行『++』操作。

那么,要对『$a + $a++』的结果为2或3做解释,只有这样:

整个表达式结果为2:第一、二个$a值均为1,得到表达式结果为2;再$a++。

整个表达式结果为3:第二个$a值为1;$a++,$a值变为2;第一个$a值为2。

总结

PHP语言在设计时,没有考虑过『++』或『--』运算符同『表达式求值』完全分离(比如说『++』在变量后的话,就在整个表达式得到值(过程中忽略自增)后,再自增),不同PHP版本存在不同的实现策略,导致同一个表达式可能会有不同的值。

实际开发中,表达式中如果使用了『++』或『--』,那么对应的变量在该表达式中不应该出现大于1次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值