编写一个PHP计算器并显示公式,可以让用户在网页上输入数学表达式,然后计算结果的同时展示出输入的公式,这样的计算器不仅实用,还能增加互动性和教育意义,我将带你了解如何实现这样一个计算器。

我们需要在网页上创建一个表单,让用户能够输入他们想要计算的数学表达式,这个表单可以包含一个文本输入框和一个提交按钮,用户输入表达式后,点击提交按钮,计算器就会处理这个表达式并显示结果。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PHP 计算器</title>
</head>
<body>
    <h1>PHP 计算器</h1>
    <form action="calculator.php" method="post">
        <input type="text" name="expression" placeholder="输入数学表达式" required>
        <button type="submit">计算</button>
    </form>
</body>
</html>

我们需要编写calculator.php文件,这个文件将处理用户提交的数学表达式,并显示计算结果以及原始表达式。

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $expression = $_POST['expression'];
    // 检查表达式是否有效
    if (preg_match('/^[+-*/()ds]+$/', $expression)) {
        // 使用 eval 函数计算表达式,但要注意安全风险
        $result = @eval('return ' . $expression . ';');
        // 显示结果和原始表达式
        echo "<h2>表达式: $expression</h2>";
        echo "<h2>结果: $result</h2>";
    } else {
        echo "<p>无效的数学表达式。</p>";
    }
}
?>

在上面的代码中,我们使用了preg_match函数来检查用户输入的表达式是否只包含数字、加减乘除符号和括号,这是为了确保表达式的安全性,我们使用eval函数来计算表达式。eval函数会执行字符串作为PHP代码,这在处理用户输入时可能会带来安全风险,因此我们使用了@符号来抑制错误信息。

使用eval并不是一个安全的做法,因为它允许执行任意代码,一个更安全的方法可能是使用数学表达式解析库,比如math-php,它可以安全地解析和计算数学表达式。

安装math-php库后,我们可以修改calculator.php文件,使用这个库来计算表达式:

<?php
require_once 'vendor/autoload.php';
use MathPHPExpressionExpression;
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $expression = $_POST['expression'];
    // 检查表达式是否有效
    if (preg_match('/^[+-*/()ds]+$/', $expression)) {
        // 使用 math-php 计算表达式
        try {
            $result = Expression::evaluate($expression);
            echo "<h2>表达式: $expression</h2>";
            echo "<h2>结果: $result</h2>";
        } catch (Exception $e) {
            echo "<p>计算错误: " . $e->getMessage() . "</p>";
        }
    } else {
        echo "<p>无效的数学表达式。</p>";
    }
}
?>

在这个版本中,我们使用了math-php库的Expression::evaluate方法来安全地计算数学表达式,如果表达式无效或计算过程中出现错误,我们会捕获异常并显示错误信息。

不要忘记在HTML文件中链接到calculator.php,这样用户提交表单后,页面就会跳转到calculator.php并显示结果。

通过这种方式,我们不仅实现了一个简单的PHP计算器,还能显示用户输入的数学表达式,增加了计算器的互动性和教育价值,希望这个教程能帮助你理解如何使用PHP创建一个基本的计算器,并展示计算公式。