php - 为什么 PHP 解析器理解 "$x++-++$x",但在 "$x+++++$x"上失败?

标签 php

我有一个引擎,它通过从文件中获取公式、操作数和运算符来执行一些数学和逻辑运算。 所有操作都在 eval 范围内执行,最终结果保存在另一个文件中。

这些文件通常通过网络传输,因此我试图通过剥离操作前后的所有空间来最小化它们。 据我所知,这件事没有严格的规定,但是我偶然发现了这种行为:

$x = 1;
$result = $x++-++$x; // works
$result = $x+++++$x; // fails
$result = $x++ + ++$x; // works again
  1. 为什么 PHP 被“+++++”语法迷惑,却接受“++-++”?如何 “加号”比“减号”好吗?

  2. 是否有任何敏感运算符的列表 关于空间?

最佳答案

PHP 解析器在最后一个 + 符号之前搜索 ++ 符号,语法 ($x++)++ 使得没有意义,因为增量运算符应该应用于变量(而不是整数,这是第一个 $x++ 的结果)。

运算符操作的优先级可以在这里找到:
http://php.net/manual/en/language.operators.precedence.php

$x+++++$x;
^ php parser starts here, find $x++
    ^ here there is a new ++, which has hight precedence to the next + char
      ^ here is the last +, which the php parser will find last.

当两个++++用减号分开时,代码实际上是$x++ -++$x, PHP解析器可以理解的一种。

这也是 $x+++++$x 起作用的原因。

关于php - 为什么 PHP 解析器理解 "$x++-++$x",但在 "$x+++++$x"上失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45655968/

相关文章:

php - 如何让 PHP 5.3.8 读取 .user.ini 文件?

php - 将列与数据数组进行比较

php - ajax 调用创建临时表的 php 文件

php - 每个论坛最新帖子的 MySQL 查询设计

php - 如何使用 PHP 检查多个项目是否在数组中

PHP - 如何使用表单桥接表

php - Simplexml_load_string($string) 返回一个空对象但 $string 包含 xml?下面的代码

php - 如何以设定的时间间隔单独显示行?

php - 使用 PHP 动态提供 Google Analytics 代码

php - PDO异常 : SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'category_id' in IN/ALL/ANY subquery is ambiguous