PHP回显错误-相同的回显,很少工作,很少不工作';T

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

我有一个非常奇怪的问题:下面列出的代码中,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  ^
否则,您可以想象您的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