Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中作为变量的赋值运算符_Php_Variables_Variable Assignment_Operator Keyword - Fatal编程技术网

在php中作为变量的赋值运算符

在php中作为变量的赋值运算符,php,variables,variable-assignment,operator-keyword,Php,Variables,Variable Assignment,Operator Keyword,我试图使用运算符作为变量 $num1 = 33; $num2 = 44; $operator = "+"; $answer = ($num1.$operator.$num2); 它打印的是“33+44”,而不是77 或者 我希望能够使用as:$answer=$num1.$operators[“plus”]。$num2 如果不使用“if”语句,如何实现这一点 $answer = ($operator == "+") ? $num1 + $num2 : 0; 你可以尝试使用。此示例适用于php

我试图使用运算符作为变量

$num1 = 33;
$num2 = 44;
$operator = "+";
$answer = ($num1.$operator.$num2);
它打印的是“33+44”,而不是77

或者

我希望能够使用as:
$answer=$num1.$operators[“plus”]。$num2

如果不使用“if”语句,如何实现这一点

$answer = ($operator == "+") ? $num1 + $num2 : 0;
你可以尝试使用。此示例适用于php 5.5:

$num1 = 33;
$num2 = 44;
$operator = '+';
$funcs = array(
    '+' => 'bcadd',
    '-' => 'bcsub',
    '/' => 'bcdiv',
    '*' => 'bcmul',
    );

$answer = $funcs[$operator]($num1, $num2); // 77
你可以尝试使用。此示例适用于php 5.5:

$num1 = 33;
$num2 = 44;
$operator = '+';
$funcs = array(
    '+' => 'bcadd',
    '-' => 'bcsub',
    '/' => 'bcdiv',
    '*' => 'bcmul',
    );

$answer = $funcs[$operator]($num1, $num2); // 77
小心 eval()语言构造非常危险,因为它允许执行任意PHP代码。因此,不鼓励使用它。如果您已经仔细验证了除了使用此构造之外没有其他选择,请特别注意,在未事先正确验证的情况下,不要将任何用户提供的数据传递到该构造中

小心
eval()语言构造非常危险,因为它允许执行任意PHP代码。因此,不鼓励使用它。如果您已经仔细验证了除了使用此构造之外没有其他选择,请特别注意,在未事先正确验证的情况下,不要将任何用户提供的数据传递到该构造中。

在用户土地上

想想你想要实现的事情。为什么不创建固定代码闭包?您可以通过以下方式轻松完成:

$operators = array(
   "plus"=>function($x, $y)
   {
      return $x+$y;
   }, 
   "minus"=>function($x, $y)
   {
      return $x-$y;
   },
   "times"=>function($x, $y)
   {
      return $x*$y;
   }, 
   "div"=>function($x, $y)
   {
      return $x/$y;
   }
  );

//in PHP 5.5:
$result = $operators['plus']($num1, $num2);
//in PHP<5.5:
//$result = call_user_func_array($operators['plus'], [$num1, $num2])
然后您的结果将存储在
$result
变量中。这是关于“简单”的方式,但不是“正确”的方式。问题是——这是不安全的。想想看,你正在执行一些代码,这是动态的。如果您的代码与用户输入无关,那么它可能是适用的——在这种情况下,如果您之前正在检查操作数和运算符。但我仍然建议在使用它之前要三思

如果仍然需要评估

然后,我建议查看一些现有的实现。以下是一些链接:


    • 在用户土地上

      想想你想要实现的事情。为什么不创建固定代码闭包?您可以通过以下方式轻松完成:

      $operators = array(
         "plus"=>function($x, $y)
         {
            return $x+$y;
         }, 
         "minus"=>function($x, $y)
         {
            return $x-$y;
         },
         "times"=>function($x, $y)
         {
            return $x*$y;
         }, 
         "div"=>function($x, $y)
         {
            return $x/$y;
         }
        );
      
      //in PHP 5.5:
      $result = $operators['plus']($num1, $num2);
      //in PHP<5.5:
      //$result = call_user_func_array($operators['plus'], [$num1, $num2])
      
      然后您的结果将存储在
      $result
      变量中。这是关于“简单”的方式,但不是“正确”的方式。问题是——这是不安全的。想想看,你正在执行一些代码,这是动态的。如果您的代码与用户输入无关,那么它可能是适用的——在这种情况下,如果您之前正在检查操作数和运算符。但我仍然建议在使用它之前要三思

      如果仍然需要评估

      然后,我建议查看一些现有的实现。以下是一些链接:

      我想知道为什么首先要将算术运算符作为字符串传递,但这里有一种不用if语句的方法:

      function fancy_math($num1 = 0, $num2 = 0, $operator = '+')
      {
          switch ($operator) {
              case 'minus':
              case '-':
                  return $num1 - $num2;
                  break;
      
              case 'times':
              case '*':
                  return $num1 * $num2;
                  break;
      
              case 'div':
              case '/':
                  return ($num2 !== 0) ? $num1 / $num2 : 'Error: divide by zero';
                  break;
      
              default:
                  return $num1 + $num2;
                  break;
          }
      }
      
      然后这样称呼它:

      $answer = fancy_math($num1, $num2, $operator);
      
      注意:您可以将
      '减号'
      '-'
      (等)作为
      $运算符传递,因为它将同时接受这两个运算符。如果不传递
      $运算符
      ,它将假定
      'plus'
      '+'
      自动传递。

      我想知道为什么首先要将算术运算符作为字符串传递,但这里有一种不使用If语句的方法:

      function fancy_math($num1 = 0, $num2 = 0, $operator = '+')
      {
          switch ($operator) {
              case 'minus':
              case '-':
                  return $num1 - $num2;
                  break;
      
              case 'times':
              case '*':
                  return $num1 * $num2;
                  break;
      
              case 'div':
              case '/':
                  return ($num2 !== 0) ? $num1 / $num2 : 'Error: divide by zero';
                  break;
      
              default:
                  return $num1 + $num2;
                  break;
          }
      }
      
      然后这样称呼它:

      $answer = fancy_math($num1, $num2, $operator);
      

      注意:您可以将
      '减号'
      '-'
      (等)作为
      $运算符传递,因为它将同时接受这两个运算符。如果您没有传递
      $运算符
      ,它将自动假定
      'plus'
      '+'

      您不能无条件地执行此操作,除非您使用
      eval
      ,否则不使用eval即可执行此操作。请看我的答案。你不能没有条件就这样做,除非你使用
      eval
      这不使用eval是可行的。请看我的答案。如果是“div”,请返回字符串或数字?类型安全比较,而不在检查类型之前?事实上,不好的想法,因为整个事情都属于“不好的想法”的范畴。我可以让电位除以零,就像你做的那样。否则,我们的两个解决方案以相同的方式解决问题。我的是死板的基础和运行的任何地方。你的需要5.5或笨拙的调用_user_func_array()。实际上,使用PHPYes,而且驾驶任何低于当前车型年款的车辆都很糟糕。事实上,道路上的大多数汽车都不是今年的;大多数PHP主机也不是5.5,现实情况是PHP版本与汽车无关。使用旧版本至少是不安全的。大多数软件也是如此。如果没有理由使用较低版本,就不要使用它(事实上也没有这样的理由,因为BC只是从5.2开始被破坏的)。但无论版本如何。在数值函数的上下文中返回字符串是错误的。在“div”的情况下返回字符串或数字?类型安全比较,而不在检查类型之前?事实上,不好的想法,因为整个事情都属于“不好的想法”的范畴。我可以让电位除以零,就像你做的那样。否则,我们的两个解决方案以相同的方式解决问题。我的是死板的基础和运行的任何地方。你的需要5.5或笨拙的调用_user_func_array()。实际上,使用PHPYes,而且驾驶任何低于当前车型年款的车辆都很糟糕。事实上,道路上的大多数汽车都不是今年的;大多数PHP主机也不是5.5,现实情况是PHP版本与汽车无关。使用旧版本至少是不安全的。大多数软件也是如此。如果没有理由使用较低版本,就不要使用它(事实上也没有这样的理由,因为BC只是从5.2开始被破坏的)。但无论版本如何。在数值函数的上下文中返回字符串是错误的。