我正在用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
数据。