Rizier123..
8
好吧我似乎要在这里清理一些东西.
我们来看看运算符优先级,它说:
.具有更高的优先级,比+=,-=,*=,/=
. 是左联想的
=,+=,-=,*=,/=是对联想
我们还看一下手册底部的注释:
注意:
尽管=的优先级低于大多数其他运算符,但PHP仍然允许使用类似于以下的表达式:if(!$ a = foo()),在这种情况下,foo()的返回值将放入$ a.
意味着即使是艰难=的优先级也低于.首先评估的优先级.如果您执行以下操作,也可以看到此内容:
$xy = "HERE";
echo "I am " . $xy = "NOT HERE";
现在你会认为它.具有更高的优先级=并且将首先得到评估,但是从手册中的注释开始,分配是第一个,你最终得到这个:
echo "I am " . ($xy = "NOT HERE");
输出:
I am NOT HERE
因此,如果我们将所有这些信息放在一起,我们可以说,首先评估赋值,但它是正确的关联.意思是:
$var1 = 3;
echo "Addition = " . ($var1 += 3 . "
");
echo "Subtraction = " . ($var1 -= 3 . "
");
echo "Addition = " . ($var1 *= 3 . "
");
echo "Addition = " . ($var1 /= 3 . "
");
所以这段代码最终会在这里:
echo "Addition = " . ($var1 += "3
");
echo "Subtraction = " . ($var1 -= "3
");
echo "Addition = " . ($var1 *= "3
");
echo "Addition = " . ($var1 /= "3
");
然后通过算术运算符转换为整数我们最终得到这个:
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
现在如何解决这个问题?只需将您的作业包装在括号中,这样
标记就不会进入作业.例如
echo "Addition = " . ($var1 += 3) . "
";
echo "Subtraction = " . ($var1 -= 3) . "
";
echo "Multiplication = " . ($var1 *= 3) . "
";
echo "Division = " . ($var1 /= 3) . "
";
//^ ^ So the br tag doesn't get in the assignment of the variable.
这个答案似乎不包含其他一些错误信息,并澄清了发生了什么以及为什么.+1 (2认同)