我有一个非常奇怪的问题:在下面列出的代码中,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>
答案 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
的值。
乘法和除法运算符具有更高的优先级,因此首先对它们进行求值,从而覆盖从左到右的顺序。这就是为什么它适用于最后两个案例。