用PHP构建OOP计算器

时间:2013-11-30 15:39:40

标签: php oop

我正在用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();
}

计算器类在此文件中定义:

<?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类中声明两个变量并使用一个开关,但它不起作用。

1 个答案:

答案 0 :(得分:0)

您现有的表格无效。输入如下:

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

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

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

id对于附加每个项目事件和附加label仍然有用,所以我会保留它。

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

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

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