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

时间:2015-01-25 16:53:40

标签: php echo

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

    <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> 

2 个答案:

答案 0 :(得分:4)

您必须在计算中加上括号,如:

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

否则你可以想象你的echo语句:

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

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

答案 1 :(得分:1)

在计算周围加上括号,如下所示:

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

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

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

乘法和除法运算符具有更高的优先级,因此首先对它们进行求值,从而覆盖从左到右的顺序。这就是为什么它适用于最后两个案例。