看来我必须清理这里的一些东西了。
让我们看一下运算符优先级,其中说:
-
.
具有更高的优先级,比+=
, -=
, *=
, /=
-
.
是左结合的
-
=
, +=
, -=
, *=
, /=
是右结合的
-
我们还看一下手册底部的注释:
Note:虽然= 的优先级低于大多数其他运算符,PHP 仍然允许类似于以下的表达式: if (!$a = foo()),在这种情况下 foo() 的返回值被放入 $a 中。
意味着即使艰难=
优先级低于.
首先对其进行评估。如果您执行以下操作,您也可以看到这一点:
$xy = "HERE";
echo "I am " . $xy = "NOT HERE";
现在你可能会认为.
优先级高于=
并将首先进行评估,但根据手册中的注释,作业是第一个,您最终会得到以下结果:
echo "I am " . ($xy = "NOT HERE");
output:
I am NOT HERE
因此,如果我们将所有这些信息放在一起,我们可以说,首先对作业进行评估,但它是右关联的。意思是这样的:
$var1 = 3;
echo "Addition = " . ($var1 += 3 . "<br>");
echo "Subtraction = " . ($var1 -= 3 . "<br>");
echo "Addition = " . ($var1 *= 3 . "<br>");
echo "Addition = " . ($var1 /= 3 . "<br>");
所以这段代码最终会是这样的:
echo "Addition = " . ($var1 += "3<br>");
echo "Subtraction = " . ($var1 -= "3<br>");
echo "Addition = " . ($var1 *= "3<br>");
echo "Addition = " . ($var1 /= "3<br>");
然后通过算术运算符得到转换为整数我们最终得到这样的结果:
echo "Addition = " . ($var1 += 3);
echo "Subtraction = " . ($var1 -= 3);
echo "Addition = " . ($var1 *= 3);
echo "Addition = " . ($var1 /= 3);
分配完成后,将对串联进行求值,如下所示:
echo "Addition = " . 6;
echo "Subtraction = " . 3;
echo "Addition = " . 9;
echo "Addition = " . 3;
这样你最终会得到这样的输出:
Addition = 6Subtraction = 3Addition = 9Addition = 3
现在如何解决这个问题?只需将您的作业括在括号中,以便<br>
标签不进入作业。例如。
echo "Addition = " . ($var1 += 3) . "<br>";
echo "Subtraction = " . ($var1 -= 3) . "<br>";
echo "Multiplication = " . ($var1 *= 3) . "<br>";
echo "Division = " . ($var1 /= 3) . "<br>";
//^ ^ So the br tag doesn't get in the assignment of the variable.