php实现计算器程序
实现基础计算器功能
使用PHP创建一个简单的计算器程序,可以处理基本的加减乘除运算。以下是一个基于表单提交的实现方式:
<?php
$result = '';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$num1 = $_POST['num1'];
$num2 = $_POST['num2'];
$operator = $_POST['operator'];
switch ($operator) {
case '+':
$result = $num1 + $num2;
break;
case '-':
$result = $num1 - $num2;
break;
case '*':
$result = $num1 * $num2;
break;
case '/':
$result = ($num2 != 0) ? $num1 / $num2 : "除数不能为零";
break;
}
}
?>
<form method="post" action="">
<input type="number" name="num1" required>
<select name="operator">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="number" name="num2" required>
<button type="submit">计算</button>
</form>
<?php if ($result !== ''): ?>
<p>结果: <?php echo $result; ?></p>
<?php endif; ?>
增强版计算器功能
扩展计算器功能,支持更复杂的表达式计算和错误处理:
<?php
$result = '';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
try {
$expression = $_POST['expression'];
// 移除所有空格
$expression = str_replace(' ', '', $expression);
// 安全验证
if (!preg_match('/^[0-9+\-*\/.()]+$/', $expression)) {
throw new Exception("表达式包含非法字符");
}
// 使用eval计算表达式(生产环境应考虑更安全的方式)
$result = eval("return $expression;");
} catch (DivisionByZeroError $e) {
$result = "除数不能为零";
} catch (Exception $e) {
$result = "计算错误: " . $e->getMessage();
}
}
?>
<form method="post" action="">
<input type="text" name="expression" placeholder="输入表达式,如:2*(3+4)" required>
<button type="submit">计算</button>
</form>
<?php if ($result !== ''): ?>
<p>结果: <?php echo $result; ?></p>
<?php endif; ?>
使用数学表达式解析库
对于更复杂的计算需求,可以使用专门的数学表达式解析库,如math-parser:
require_once 'vendor/autoload.php';
use MathParser\StdMathParser;
use MathParser\Interpreting\Evaluator;
$parser = new StdMathParser();
$evaluator = new Evaluator();
$result = '';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
try {
$expression = $_POST['expression'];
$AST = $parser->parse($expression);
$result = $AST->accept($evaluator);
} catch (Exception $e) {
$result = "计算错误: " . $e->getMessage();
}
}
实现科学计算器功能
扩展计算器功能,支持科学计算函数:
<?php
$result = '';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$function = $_POST['function'];
$number = $_POST['number'];
switch ($function) {
case 'sqrt':
$result = sqrt($number);
break;
case 'sin':
$result = sin(deg2rad($number));
break;
case 'cos':
$result = cos(deg2rad($number));
break;
case 'tan':
$result = tan(deg2rad($number));
break;
case 'log':
$result = log10($number);
break;
case 'ln':
$result = log($number);
break;
}
}
?>
<form method="post" action="">
<select name="function">
<option value="sqrt">平方根</option>
<option value="sin">正弦</option>
<option value="cos">余弦</option>
<option value="tan">正切</option>
<option value="log">常用对数</option>
<option value="ln">自然对数</option>
</select>
<input type="number" name="number" step="any" required>
<button type="submit">计算</button>
</form>
计算器安全注意事项
在生产环境中实现计算器时,需要注意以下几点安全措施:
避免直接使用eval函数处理用户输入,这可能导致代码注入漏洞
对用户输入进行严格验证,只允许特定的数学运算符和数字
考虑使用专门的数学表达式解析库,如PHP-MathParser
对于复杂计算,可以在客户端使用JavaScript预先验证表达式
实现输入过滤和输出转义,防止XSS攻击







