【问题标题】:Can you use a variable as an order of operations?您可以使用变量作为操作顺序吗?
【发布时间】:2013-12-26 02:43:30
【问题描述】:

我正在使用 html 和 php 编写一个基本的计算器脚本。这个想法是输入两个数字并选择您要使用的运算符。

HTML 代码

<html>
<head>
<title>Calculator</title>
<meta charset="utf-8" />
<link href="style.css" rel="stylesheet" type="text/css">
</head>

<body>

<div id="wrapper">

<h3>Calculator</h3>

<form action="calc.php" method="get">

<p><input name="num1" type="text" size="8" maxlength="8">

<select name="calc">
    <option value="+">+</option>
    <option value="-">-</option>
    <option value="*">*</option>
    <option value="/">/</option>
</select>

<input name="num2" type="text" size="8" maxlength="8"></p>

<p><input type="submit" value="Calculate"></p>

</form>

</div>

</body>
</html>

PHP 代码

<html>
<head>
    <title>Calculator</title>
    <meta charset="utf-8" />
    <link href="style2.css" rel="stylesheet" type="text/css">
</head>

<body>

<div id="wrapper">

<?
    $num1=$_GET['num1'];
    $num2=$_GET['num2'];
    $calc=$_GET['calc'];

    $result = $num1 $calc $num2;

    echo "$result";
?>
</div>
</body>

</html>

这是 ($result = $num1 $calc $num2;) 合乎逻辑还是完全错误?有没有其他选择?任何帮助将不胜感激。

【问题讨论】:

    标签: php html variables syntax calculator


    【解决方案1】:

    没有那个功能在 PHP 中不可用。

    您需要switch 语句或某种条件:

    switch($calc)
    {
        case "+":
            return $num1 + $num2;
            break;
        case "-":
            return $num1 - $num2;
            break;
    }
    

    注意: 有人会不可避免地注意到break 表达式并不是严格必要的,如果您在每种情况下都使用return,但它们在规范和IDE 中有时接他们的缺席。

    【讨论】:

    • 根据 leemo 代码,这是正确的做法。使用任何形式的 eval 或类似形式都是粗略的假设,即输入正确且无恶意。此外,您可能应该从输入数字中去除任何看起来不像数字、+ve 或 -ve 或小数点的东西。也就是说,使用正则表达式只允许那些合法的输入字符而不是其他。
    • 这对我有用,但我没有得到任何输出。如何使用它来回显结果?
    • @ScooterParr 我假设您要将上述代码转储到函数中。您只需将 return's 更改为 echo's
    【解决方案2】:

    试试这个

    <?php
    $num1=$_GET['num1']; // get value 1 from your form
    $num2=$_GET['num2'];// get value 2 from your form
    $calc=$_GET['calc']; // get operator from your form
    $operators = array(
    '+' => 'bcadd',
    '-' => 'bcsub',
    '*' => 'bcmul',
    '/' => 'bcdiv'
    );
    echo $operators[$calc]($num1, $num2);
    ?>
    

    BCMath查看更多信息

    【讨论】:

    • 我没有测试过,但你可能会也可能不会遇到一些 url 编码问题。除此之外,这是一个很好的答案。
    猜你喜欢
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2011-03-21
    • 2011-10-14
    • 2011-10-08
    • 2014-10-08
    • 1970-01-01
    • 2019-02-14
    相关资源
    最近更新 更多