1 回答
TA贡献1818条经验 获得超11个赞
您之后没有看到 HTML 内容的原因echo $num是因为您遇到了致命错误。
在 php 控制台 (php -a) 中运行代码时会看到这一点
php > $num = new Calculator(1,2,'Subtract');
-1
php > echo $num;
PHP Catchable fatal error: Object of class Calculator could not be converted to string in php shell code on line 1
PHP Stack trace:
PHP 1. {main}() php shell code:0
php >
为了解决这个问题,我们可以对您的 Calculator 类进行一些概念上的更改:
一个方法应该只做一件事。构造函数最适合用于初始化,您的计算器的功能Add,Subtract,Multiply,和Divide大概应该是独立的方法。
作为一般规则,对象(作为模型或逻辑部分的一部分)不应该echo或print它的结果。在我看来,这是逻辑和表示的合并——您应该努力将其分开。这也是您遇到的问题的一部分。
我的第一个倾向是将参数传递给方法,而不是构造函数。这允许您输入提示您期望的值。我以整数为例。如果传递了错误数据(字符串),则会抛出异常。如果只传递 1 个值,则会抛出异常。
归根结底,没有一种“正确”的方法可以做到;经验有助于展示以后更容易处理的方法。:)
我的建议,FWIW...
班级:
<?php
class Calculator {
public function __construct() { }
public function add(int $addend1, int $addend2) {
return $addend1 + $addend2;
}
public function subtract(int $subtrahend, int $minuend) {
return $subtrahend - $minuend;
}
public function multiply(int $factor1, int $factor2) {
return $factor1 * $factor2;
}
public function divide(int $dividend, int $divisor) {
return $dividend / $divisor;
}
}
PHP/HTML
function assignPostVar($name) {
if(isset($_POST[$name])) {
return $_POST[$name];
}
}
$error = '';
if(isset($_POST['submit'])) {
$calc = new Calculator;
$n1 = assignPostVar('number1');
$n2 = assignPostVar('number2');
try {
switch($_POST['submit']) {
case 'Add':
$result = $calc->add($n1,$n2);
break;
case 'Subtract':
$result = $calc->subtract($n1,$n2);
break;
case 'Multiply':
$result = $calc->multiply($n1,$n2);
break;
case 'Divide':
$result = $calc->divide($n1,$n2);
break;
default:
throw new Exception('Invalid operation');
}
} catch (Exception $e) {
$error = $e->getMessage();
}
}
?>
<?php if($error): ?>
<div class="error">Encountered error: <?= $error ?></div>
<?php endif; ?>
<form method="POST">
Number1: <input type="text" name="number1" id="number1" />
<br/>
Number2: <input type="text" name="number2" id="number2" />
<br/><br/>
<input type="submit" id="add" name="submit" value="Add" />
<input type="submit" id="divide" name="submit" value="Divide" />
<input type="submit" id="subtract" name="submit" value="Subtract" />
<input type="submit" id="multiply" name="submit" value="Multiply" />
</form>
- 1 回答
- 0 关注
- 212 浏览
添加回答
举报