php - 为什么 html br 换行标记在此代码中不起作用?

标签 php html 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>";

?>

最佳答案

看来我必须清理这里的一些东西。

让我们来看看operator precedence ,它说:

  1. .优先级高于 += , -= , *= , /=

  2. .是左结合的

  3. = , += , -= , *= , /=是右结合的

  4. 我们还看一下手册底部的注释:

    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.

关于php - 为什么 html br 换行标记在此代码中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30435441/

相关文章:

php - Doctrine - 更新事件监听器内的多对多关联

PHP 和 MySQL : 72 hours expiration for a task

javascript - 页面刷新时,需要获取输入的值

ruby - 方法调用如何与运算符优先级交互?

javascript - 加载文件包含使用文档就绪功能不起作用

php - 从查询填充的下拉框中检索数据

javascript - 在 HTML 中,使用 JavaScript,创建新的单选按钮及其文本?

html - div 的内容未居中对齐

r - 在子集函数和逻辑运算符中使用多个条件

css - 您可以在加载时更改 css 类优先级吗?