有人能告诉我为什么我的 php 换行符不起作用(回显)吗?
我知道我可以用不同的方式编写代码来使换行符起作用,但我想知道这背后的原因?
<?php
$var1 = 3;
echo "Addition = " . $var1 += 3 . "<br>";
echo "Subtraction = " . $var1 -= 3 . "<br>";
echo "Multiplication = " . $var1 *= 3 . "<br>";
echo "Division = " . $var1 /= 3 . "<br>";
?>
看来我必须清理这里的一些东西。
让我们来看看operator precedence ,它说:
.
优先级高于 +=
, -=
, *=
, /=
.
是左结合的
=
, +=
, -=
, *=
, /=
是右结合的
我们还看一下手册底部的注释:
Note:
Although = has a lower precedence than most other operators, PHP will still allow expressions similar to the following: if (!$a = foo()), in which case the return value of foo() is put into $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 . "<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>");
然后通过算术运算符得到convert to an integer我们最终得到这个:
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.