PHP 回显错误 - 相同的回声,很少工作,很少有没有


PHP echo error - same echoes, few work, few doesn't

我有一个非常奇怪的问题:下面列出的代码中有 4 个回声几乎相同,但只有最后一个正常工作(前两个回声只打印加法/减法的答案,没有文本)。代码如下:

    <html>
<body>
Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?><br>
<?php $sk1 = $_POST["sk1"];
$sk2 = $_POST["sk2"];
$veiksm = $_POST["veiksmas"];
switch($veiksm){
    default:
        echo "Jus nepasirinkote veiksmo";
        break;
    case "sud":
        echo "Sudeties veiksmo rezultatas: " .$sk1 + $sk2;
        break;
    case "ati":
        echo "Atimties veiksmo rezultatas: " .$sk1 - $sk2;
        break;
    case "dal":
        echo "Dalybos veiksmo rezultatas: " .$sk1 / $sk2;
        break;
    case "dau":
        echo "Daugybos veiksmo rezultatas: " .$sk1 * $sk2;
        break;
}
?>
</body>
</html> 
您必须在

计算两边加上括号,例如:

echo "Atimties veiksmo rezultatas: " . ($sk1 - $sk2);
                                     //^ See here  ^

否则你可以想象你的回声语句是这样的:

"Sudeties veiksmo rezultatas: 17" + 5 // Same as 0 + 5, because the string is casted to int which is 0

*/也有效,因为它们首先得到评估

在计算两边加上括号,如下所示:

echo "Sudeties veiksmo rezultatas: " . ($sk1 + $sk2);

原因是表达式的处理顺序。没有括号,PHP 从左到右计算所有内容,因此它将首先将$sk1连接到字符串。合并值将"Sudeties veiksmo rezultatas: 1"(如果 $sk 1 为 1)。

之后,$sk2将添加到该值中。因为 PHP 无法将字符串相加,所以它会尝试将其转换为数字。此转换失败,因为字符串以非数字文本开头,默认为 0 添加到 $sk2 的值。

乘法和除法运算符具有更高的优先级,因此首先计算它们,覆盖从左到右的顺序。这就是为什么它适用于最后两种情况。