用PHP构建OOP计算器


Building an OOP Calculator in PHP

我正在用PHP构建一个OOP计算器,我认为我一开始做得不错。我有一个HTML文件:

<?php
require_once("includes/initialize.php");
?>
<!DOCTYPE html>
<html>
<head>
    <title>Huiswerk week 2</title>
    <meta charset="utf-8"/>
</head>
<body>
<?php if (isset($error)) : ?>
    <span class="error"><?php print $error; ?></span>
<?php endif; ?>
<?php if (empty($calculation)) : ?>
    <form action="index.php" method="POST">
        <fieldset>
            <legend>Rekenmachine</legend>
            <label for="first-number">Getal 1</label><input type="number" id="first-number" name="first-number "/>
            <label for="second-number">Getal 2</label><input type="number" id="second-number" name="second-number"/>
            <input type="radio" id="countUp" value="countUp" name="option"/><label for="countUp">+</label>
            <input type="radio" id="countDown" value="countDown" name="option"/><label for="countDown">-</label>
            <input type="radio" id="divide" value="divide" name="option"/><label for="divide">/</label>
            <input type="radio" id="multiply" value="multiply" name="option"/><label for="multiply">*</label>
            <input type="submit" id="submit" value="Uitvoeren"/>
        </fieldset>
    </form>
<?php endif; ?>
<?php
if (is_numeric($_POST["first-number"]) && is_numeric($_POST["second-number"])) {
    switch ($_POST["option"]) {
        case "countUp":
            $calc = new Calculator();
            $result = $calc->countUp($_POST["first-number"], $_POST["second-number"]);
            echo $result;
            break;
        case "countDown":
            $calc = new Calculator();
            $result = $calc->countDown($_POST["first-number"], $_POST["second-number"]);
            echo $result;
            break;
        case "divide":
            $calc = new Calculator();
            $result = $calc->divide($_POST["first-number"], $_POST["second-number"]);
            echo $result;
            break;
        case "multiply":
            $calc = new Calculator();
            $result = $calc->divide($_POST["first-number"], $_POST["second-number"]);
            echo $result;
            break;
        default:
            $error = "Something went terribly wrong.";
            echo $error;
            break;
    }
} else {
    $error = "One of the given numbers is not numeric.";
    echo $error;
}
?>
</body>
</html>

index.php中的include如下:

<?php
// Require needed files
require_once "settings.php";
require_once "classes/Calculator.php";
try{

} catch (Exception $e){
    $error = "Oops, try to fix your error please: " . $e->getMessage() . " on line " . $e->getLine() . " of " . $e->getFile();
}

Calculator类在这个文件中定义:

<?php
/**
 * Class Calculator
 */
class Calculator {
    public function __construct(){
    }
    /**
     * @param $firstNumber
     * @param $secondNumber
     * @return mixed
     */
    public function countUp($firstNumber, $secondNumber){
        $result = $firstNumber + $secondNumber;
        return $result;
    }
    /**
     * @param $firstNumber
     * @param $secondNumber
     * @return mixed
     */
    public function countDown($firstNumber, $secondNumber){
        $result = $firstNumber - $secondNumber;
        return $result;
    }
    /**
     * @param $firstNumber
     * @param $secondNumber
     * @return float
     */
    public function divide($firstNumber, $secondNumber){
        $result = $firstNumber / $secondNumber;
        return $result;
    }
    /**
     * @param $firstNumber
     * @param $secondNumber
     * @return mixed
     */
    public function multiply($firstNumber, $secondNumber){
        $result = $firstNumber * $secondNumber;
        return $result;
    }
} 

任务是有一个收集两个值和四个选项(+、-、/、*)的表单。给定的数字将用于选定的计算。计算器必须是OOP的,当出现错误时(比如输入不是数字时),页面将返回到两个输入不变的表单。

我应该如何从这里开始?我尝试过在Calculator类中声明两个var并使用一个开关,但它不起作用。

您的表单现状不会起任何作用。像这样的输入:

<input type="number" id="first-number" />

必须具有name属性才能返回值。试试这个:

<input type="number" id="first-number" name="first-number" />

id对于附加每项事件和附加label仍然很有用,所以我会将其保留在中

其次,即使在正常查看页面时,即在get操作中,您也在访问$_POST超全局。一个解决方案是这样包装现有的if语句:

if ($_POST) {
    if (is_numeric($_POST["first-number"]) && is_numeric($_POST["second-number"])) {
        // ...
    }
}

这样,只有当用户提交表单时,您才能访问post数据。