【问题标题】:can we convert a string into a sign in php我们可以在php中将字符串转换为符号吗
【发布时间】:2016-10-19 10:42:00
【问题描述】:

我正在尝试用 PHP 制作一个计算器,现在我已经在 php 中编写了一个函数来添加几个数字,但是它的连接而不是添加它可以有人帮我指导我完成这项任务。

function cal($val1 , $opt , $val2){
  return $sum =  $val1 . $opt . $val2;
}

现在,如果我像这样调用这个函数:

echo cal(4,"+",5);

它返回4+5,但我正在寻找9 的答案 $opt 是否有可能用作运算符而不是字符串,我可以根据像

这样的运算符进行加减运算

【问题讨论】:

  • 好吧,. 是连接运算符...那么它应该如何做任何事情连接?
  • @Mohammad 你应该永远使用eval(),除非绝对没有其他办法。在这种情况下,有。查看运算符是什么并实现功能。
  • @Mohammad concidering 这个问题,我很确定参数没有被检查。
  • @Mohammad 诸如“如果您检查参数是安全的”这样的陈述的问题在于,您必须绝对确定您想到了所有可能发生的事情。这真的现实吗?我同意不惜一切代价避免eval()

标签: php


【解决方案1】:

你应该做一个 if 语句或 switch case 一个;

例子

if ($opt =='+'){
   return $val1+$val2;
}else if($opt =='-'){ 
   return $val1-$val2;
} .... etc

【讨论】:

    【解决方案2】:

    你可以为你的程序使用一个非常基本的方法 喜欢

    switch ($opt) {
        case "+":
        echo  $val1 + $val2;
        break;
       case "-":
        echo  $val1 - $val2;;
        break;
       case "*":
        echo  $val1 * $val2;;
        break;
        ...
       default:
        code to be executed if $opt is different from all labels;
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用eval() 运行字符串作为代码。您应该在使用前检查值。

      function cal($val1 , $opt , $val2){
          if (is_numeric($val1, $val2) && preg_match("/[+-\/\*%]/", $opt))
              return eval($val1 . $opt . $val2);
      }
      

      【讨论】:

        【解决方案4】:

        您可以为此目的使用eval,但请仔细验证您的数据。正如在手册状态中的建议:

        eval() 语言结构非常危险,因为它允许执行任意 PHP 代码。因此不鼓励使用它。如果您已仔细验证除了使用此构造之外别无选择,请特别注意不要将任何用户提供的数据传入其中,而无需事先正确验证。

        function cal($val1 , $opt , $val2)
        {
            if (!is_numeric($val1)) return false;
            if (!is_numeric($val2)) return false;
            if (!in_array($opt, ["+", "-", "*", "/"])) return false;
        
            return eval("return $val1 $opt $val2;");
        }
        
        echo cal(3.2, "*", 4.2);
        

        Live example

        【讨论】:

          猜你喜欢
          • 2011-12-04
          • 2021-02-05
          • 2014-04-24
          • 2011-02-10
          • 1970-01-01
          • 1970-01-01
          • 2018-09-16
          • 2011-01-01
          • 2022-01-05
          相关资源
          最近更新 更多