我正在用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类中声明两个变量并使用一个开关,但它不起作用。
答案 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
数据。