为什么1 + + + 1在php中评估为2?

时间:2018-04-27 06:47:28

标签: php math operators addition signed

任何人都可以解释为什么此代码打印2

$var = 1 + + + 1;
echo $var;

2 个答案:

答案 0 :(得分:1)

参考arithmetic operators page in the manual

如果php有两个实体来执行算术/数学,它将优先考虑该动作而不是身份/否定。当两个实体之间已确定数学运算或仅存在一个实体时,+-符号将被视为标识/否定运算符。

代码:(Demo

$var4 = 0 - - 4;        // zero minus negated 4
var_export($var4);

echo "\n";
$var5 = - 5;              // negated 5
var_export($var5);

echo "\n";
$var6 = - - 6;            // negated negated 6
var_export($var6);

echo "\n";
$var7 = - - - 7;           // negated negated negated 7
var_export($var7);

echo "\n";
$var8 = - - - - 8;        // negated negated negated negated 8
var_export($var8);

输出:

4
-5
6
-7
8

非加/非负运算符 - 即:*/%** - 只有一种解释因此导致在已经确定先前的数学运算时解析错误。

悬空右侧算术运算符不能用作加,减,标识,否定等,从而导致解析错误。 E.g 8 - - https://3v4l.org/qr2D8

...此外

echo 1 + - 2;     // -1  (1 plus neg 2)
echo "\n";
echo 1 - + 2;     // -1  (1 minus pos 2)
echo "\n";
echo 1 + - - 3;   //  4  (1 plus neg neg 3)
echo "\n";
echo 1 - + + 3;   // -2  (1 minus pos pos 3)
echo "\n";
echo 1 - - - 3;   // -2  (1 minus neg neg 3)
echo "\n";
echo 1 + + + 3;   //  4  (1 plus pos pos 3)
echo "\n";
echo 1 + + - - 4; //  5  (1 plus pos neg neg 4)
echo "\n";
echo 1 - - + + 4; //  5  (1 minus neg pos pos 4)
echo "\n";
echo 1 - - - - 4; //  5  (1 minus neg neg neg 4)
echo "\n";
//echo 1 - - * + 4;  // parse error
//echo "\n";

答案 1 :(得分:0)

这是基本的数学。你在计算的基本上只是

1 + (1)

和加号(不是加号运算符)是可选的。所以它只是

1 + + - 1

是2。

如果你做1 + (+-1) ,结果将是0,因为你正在计算

1 + (-1)

和+和 - 可以简化为 -

所以你在计算

1 - 1

或只是

+

参考

正如您所见here Arithmetic Operators Example Name Result +$a Identity Conversion of $a to int or float as appropriate. -$a Negation Opposite of $a. $a + $b Addition Sum of $a and $b. 符号可以有两种不同的含义。第一个是"身份"第二个是"添加"。

1 + + + 1
^ ^ ^ ^ ^
| | | | `- int
| | | `- identity operator
| | `- identity operator
| `- addition operator
`- int

这意味着

{{1}}