php:类似的代码如何产生不同的输出?

时间:2017-08-14 12:31:19

标签: php

上次我为我的运动做了简单的计算器,它的效果很好。但是今天当我再次打开代码并在浏览器中运行时,会发生一些奇怪的事情。这是我的HTML代码:

<html>
<head>
<meta charset="utf-8">
<title>Calculator</title>
</head>
<body>
    <form method="post" action="disp_form.php">
        <p>First Value:<br/>
            <input type="text" id="first" name="first">
        </p>
        <p>Second Value:<br/>
            <input type="text" id="second" name="second">
        </p>
        <select method="post" name="group1">
            <option  name="group1" id="add" value="add"><p>+</p><br/>
            <option  name="group1" id="subtract" value="subtract"><p>-</p><br/>
            <option  name="group1" id="times" value="times"><p>x</p><br/>
            <option  name="group1" id="divide" value="divide"><p>/</p><br/>
        </select>
       <p></p>
       <button type="submit" name="answer" id="answer" 
           value="answer">Calculate</button>
    </form>
</body>
</html>

这是我的PHP代码

<?php
$first = $_POST['first'];
$second= $_POST['second'];
$operator = $_POST["group1"];
switch($operator)
{
    case "add":
        echo "Answer is: " .$first + $second;
        break; 
    case "subtract":
        echo "Answer is: " .$first - $second;
        break;
    case "times":
        echo "Answer is: " .$first * $second;
        break; 
    case "divide":
        echo "Answer is: " .$first / $second;
        break;
}
?>
奇怪的是,当我使用/&amp; *,输出正确(例如2 * 5,输出为“答案是:10”)。 但是当我使用+&amp; - ,输出不正确。 (例如8 + 5,输出为5,对于8-5,输出为-5) 我认为add和substract的第一个值定义为零,这就是为什么它的结果为-5和5.但是时间和除法是如何做的呢?

5 个答案:

答案 0 :(得分:4)

乘法和除法运算符比串联运算符具有higher precedence,因此首先针对这些情况评估数学运算,然后将其合并到字符串中。

在这些情况下,代码相当于:

echo "Answer is: " .($first * $second);
echo "Answer is: " .($first / $second);

可以得到正确的答案。

加法和减法运算符具有相同的优先级,并且是左关联的,因此这些行的执行方式如下:

echo ("Answer is: " . $first) + $second;
echo ("Answer is: " . $first) - $second;

在这两种情况下,在数学运算之前,初始字符串是类型转换为整数。因为字符串不是以数字开头,所以它等同于编写

echo 0 + $second;
echo 0 - $second;

会导致$second的正面或负面版本。

正如其他人所说,将数学运算括在括号中以确保以正确的顺序计算表达式。它还可以使您的代码更易于阅读。

答案 1 :(得分:0)

问题出在这里

echo "Answer is: " .$first + $second;

由于您添加了点,因此Answer is: " .$first发生了第一次连接。你需要关闭括号添加,然后需要连接字符串,如下所示。

echo "Answer is: " . ($first + $second);

同样的事情也发生了减法。

答案 2 :(得分:0)

问题是它认为您正在进行字符串操作以添加到字符串输出中。最简单的是,您可以将数学运算放在括号中。 e.g:

echo "Answer is: " .($first + $second);

或者在另一行上将它们转换为另一个变量,然后输出结果变量。您也可以将它们转换为浮点数来确定:

echo "Answer is: " .(floatval($first) + floatval($second));

答案 3 :(得分:0)

你需要在括号内放置($ first + $ second)以获得预期的结果。乘法和除法运算符优先于加法和减法运算符,但在PHP中。添加字符串与添加和减法处于同一级别,这可能导致意外结果。 Source

答案 4 :(得分:0)

这是因为PHP中的加法和减法运算符将这两个值都转换为int然后添加它们,以便将你所写的语句分解为这样的echo (int) ("Answer is: " .$first) + (int) ($second);

要纠正这个问题,你应该首先加/减,然后如下所示连续:

echo "Answer is: " .($first + $second);