为什么html br break行标记在这段代码中不起作用?

sur*_*ren 1 html php operator-precedence

有人可以告诉我为什么我的php行不能正常工作(回声)?

我知道我可以用不同的方式编写代码来使换行工作,但我想知道这背后的原因吗?

<?php

    $var1 = 3;

    echo "Addition = "       . $var1 += 3 . "<br>";
    echo "Subtraction = "    . $var1 -= 3 . "<br>";
    echo "Multiplication = " . $var1 *= 3 . "<br>";
    echo "Division = "       . $var1 /= 3 . "<br>";

?>
Run Code Online (Sandbox Code Playgroud)

Riz*_*123 8

好吧我似乎要在这里清理一些东西.

我们来看看运算符优先级,它说:

  1. .具有更高的优先级,比+=,-=,*=,/=
  2. . 是左联想的
  3. =,+=,-=,*=,/=是对联想
  4. 我们还看一下手册底部的注释:

    注意: 尽管=的优先级低于大多数其他运算符,但PHP仍然允许使用类似于以下的表达式:if(!$ a = foo()),在这种情况下,foo()的返回值将放入$ a.

意味着即使是艰难=的优先级也低于.首先评估的优先级.如果您执行以下操作,也可以看到此内容:

$xy = "HERE";
echo "I am " . $xy = "NOT HERE";
Run Code Online (Sandbox Code Playgroud)

现在你会认为它.具有更高的优先级=并且将首先得到评估,但是从手册中的注释开始,分配是第一个,你最终得到这个:

echo "I am " . ($xy = "NOT HERE");
Run Code Online (Sandbox Code Playgroud)

输出:

I am NOT HERE
Run Code Online (Sandbox Code Playgroud)

因此,如果我们将所有这些信息放在一起,我们可以说,首先评估赋值,但它是正确的关联.意思是:

$var1 = 3;

echo "Addition = "    . ($var1 += 3 . "<br>");
echo "Subtraction = " . ($var1 -= 3 . "<br>");
echo "Addition = "    . ($var1 *= 3 . "<br>");
echo "Addition = "    . ($var1 /= 3 . "<br>");
Run Code Online (Sandbox Code Playgroud)

所以这段代码最终会在这里:

echo "Addition = "    . ($var1 += "3<br>");
echo "Subtraction = " . ($var1 -= "3<br>");
echo "Addition = "    . ($var1 *= "3<br>");
echo "Addition = "    . ($var1 /= "3<br>");
Run Code Online (Sandbox Code Playgroud)

然后通过算术运算符转换为整数我们最终得到这个:

echo "Addition = "    . ($var1 += 3);
echo "Subtraction = " . ($var1 -= 3);
echo "Addition = "    . ($var1 *= 3);
echo "Addition = "    . ($var1 /= 3);
Run Code Online (Sandbox Code Playgroud)

分配完成后,将对连接进行评估,如下所示:

echo "Addition = "    . 6;
echo "Subtraction = " . 3;
echo "Addition = "    . 9;
echo "Addition = "    . 3;
Run Code Online (Sandbox Code Playgroud)

有了这个,你最终得到这个输出:

Addition = 6Subtraction = 3Addition = 9Addition = 3
Run Code Online (Sandbox Code Playgroud)


现在如何解决这个问题?只需将您的作业包装在括号中,这样<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.
Run Code Online (Sandbox Code Playgroud)

  • 这个答案似乎不包含其他一些错误信息,并澄清了发生了什么以及为什么.+1 (2认同)