任何人都可以解释为什么此代码打印2
?
$var = 1 + + + 1;
echo $var;
答案 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}}