0

私はPHPで単純な式を計算しようとしています.式は常に同じで、唯一の変更は演算子にあります.

式を複製するのではなく、単一の式を使用して演算子を変数として使用する簡単な解決策はありますか。

何かのようなもの..

function calc($qty, $qty_price, $max_qty, $operator_value, $operator = '-') 
{

  $operators = array(
   '+' => '+',
   '-' => '-',
   '*' => '*',
  );

  //adjust the qty if max is too large
  $fmq = ($max_qty > $qty)? $qty  : $max_qty ;


  return ( ($qty_price  . $operators[$operator] . $operator_value) * $fmq ) + ($qty - $fmq) * $qty_price;

}
4

3 に答える 3

2

5.3 の回答は素晴らしいですが、関数全体を繰り返すのではなく、$qty_price +-* $operator_value を事前に計算してみませんか? コードをもう少し読みやすくする...

例えば

function calc($qty, $qty_price, $max_qty, $operator_value, $operator = '-') 
{
  $qty_price_orig = $qty_price;

  switch($operator) {
      case '-':
         $qty_price -= $operator_value;
         break;
      case '+':
        $qty_price += $operator_value; 
        break;
      case '*':
         $qty_price = $qty_price * $operator_value; 
         break;


  //adjust the qty  i max is too large
  $fmq = ($max_qty > $qty)? $qty  : $max_qty ;


  return ( $qty_price * $fmq ) + ($qty - $fmq) * $qty_price_orig;

}
于 2013-07-20T03:30:42.520 に答える
2

5.3 以降を使用している場合は、関数を演算子の値として使用します。

$operators = array(
   '+' => function (a,b) { return a+b; },
   '-' => function (a,b) { return a-b; },
   '*' => function (a,b) { return a*b; },
);

$fmq = ($max_qty > $qty)? $qty  : $max_qty ;


return ( $operators[$operator]($qty_price, $operator_value) * $fmq ) + ($qty - $fmq) * $qty_price;

< 5.3 を使用している場合は、 を使用create_function()してほとんど同じことができます。

于 2013-07-20T03:26:07.547 に答える
0

eval()仕事を終わらせるために使用したい場合:

<?php
$operators = array(
   '+' => '+',
   '-' => '-',
   '*' => '*',
  );

$a = 3;
$b = 4;
foreach ($operators as $op) {
    $expr = "$a ".$op." $b";
    eval("\$result=".$expr.";");
    print_r($expr." = ".$result."\n");
}
?>

ただし、注意して使用してください!公式の警告は次のとおりです。

eval() 言語構造は、任意の PHP コードを実行できるため、非常に危険です。したがって、その使用はお勧めできません。この構文を使用する以外に選択肢がないことを慎重に確認した場合は、ユーザーが提供したデータを事前に適切に検証せずに渡さないように特に注意してください。

于 2013-07-20T03:29:40.033 に答える