PHP回显错误-相同的回显,很少工作,很少不工作';T
我有一个非常奇怪的问题:下面列出的代码中,4个回音几乎相同,但只有最后一个正常工作(前两个回音只打印加法/减法的答案,没有文本)。 代码如下:PHP回显错误-相同的回显,很少工作,很少不工作';T,php,echo,Php,Echo,我有一个非常奇怪的问题:下面列出的代码中,4个回音几乎相同,但只有最后一个正常工作(前两个回音只打印加法/减法的答案,没有文本)。 代码如下: <html> <body> Welcome <?php echo $_POST["name"]; ?><br> Your email address is: <?php echo $_POST["email"]; ?><br> <?php $sk1 = $_POST
<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 ^
否则,您可以想象您的echo语句如下:
"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”
(如果$sk1为1)
之后,$sk2
将添加到该值。因为PHP无法将字符串相加,所以它尝试将其转换为数字。此转换失败,因为字符串以非数字文本开头,默认值为0
,该值被添加到$sk2
的值中
乘法和除法运算符具有更高的优先级,因此首先计算它们,覆盖从左到右的顺序。这就是为什么它适用于最后两种情况。好奇:为什么会发生这种情况?@SimoneNigro:因为–
+-。
所有的优先级都相同,并且从左到右求值。@CBroe字符串由于数值运算的强制转换而丢失?是的,Sudeties veiksmo rezultatas:17
被转换为数值(这样就可以向其中添加其他内容,结果是0。@SimoneNigro是的!它正在从左到右搜索字符串中的一个数字!因此请尝试以下操作:echo(int)“Sudeties veiksmo rezultatas:17”
您将得到0,但这echo(int)“17Sudeties veiksmo rezultatas:17”
将获得17分顺便说一句:如果你还没有看到它,你可以在这里参观一下:看看这个网站是如何运作的!第一个问题,4次投票。已经解决了:D