美文网首页
PHP表达式中含『++』或『--』时,变量赋值的时机

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

作者: 留白o_O | 来源:发表于2017-08-25 00:59 被阅读21次

来源

运算符优先级 Example #2 Undefined order of evaluation

原文

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

<?php
$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版本或关联代码,可能会有不同的产生不同的行为。

再解释

  1. 不同PHP版本在线测试工具 中,可以测试得到『$a + $a++』在 5.0.5 及以下版本中结果为 2,更高版本中,结果为 3 。
  2. 『++』的优先级是高于『+』,这是毋庸置疑的;而根据『++』的定义,$a 应该是使用了原值,再进行『++』操作。
  3. 那么,要对『$a + $a++』的结果为2或3做解释,只有这样:

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

总结

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

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

相关文章

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

    来源 运算符优先级 Example #2 Undefined order of evaluation 原文 Ope...

  • 7. JavaScript表达式与运算符

    7.1 表达式 7.1.1 赋值表达式 在 JavaScript 中,赋值表达式的一般语法形式为:“变量 赋值运算...

  • python的变量 类型和存储

    表达式(创建处理对象) => 语句 => 模块 => 程序 变量 创建: 第一次赋值时生成, 规则: -1包含字母...

  • python的顺序程序设计

    赋值同步赋值:变量1,变量2,....变量n=表达式1,表达式2,.....表达式n同步赋值首先计算右边n个表达式...

  • 双语学习解构赋值、数组解构和对象解构

    解构赋值语法是一种 Javascript 表达式。通过解构赋值, 可以将属性值从对象或数组中取出,赋值给其他变量。...

  • 5.PHP入门-语法概述(五)运算符

    PHP 算数运算符 PHP 赋值运算符 PHP 赋值运算符用于向变量传值。PHP 中基础的赋值运算符是 "="。这...

  • 学习JS(一)

    1.表达式:(可以包含常数或变量)eg:a=b+1; a为变量,“=”为赋值,“b+1”为表达式。几种常用表达式...

  • 第一节

    1.变量 1.PHP 没有创建变量的命令。变量会在首次为其赋值时被创建:变量是存储信息的容器: PHP 变量规则:...

  • ES6解构赋值

    解构赋值 解构赋值语法是一个 JavaScript 表达式,这使得可以将值从数组或属性从对象提取到不同的变量中 数...

  • 解构赋值

    解构赋值:解构赋值语法是一个JavaScript表达式,这使得可以将数组或属性从对象提取到不同的变量中。就是按照一...

网友评论

      本文标题:PHP表达式中含『++』或『--』时,变量赋值的时机

      本文链接:https://www.haomeiwen.com/subject/pdpydxtx.html