2011-01-17 23 views
1

Iは+又は- と2つの整数の変数$initial$unitような値を持つことができる文字列変数、$operationを有します。PHP - 演算子として文字列を用いて演算を

だから私は

if($operation == '+') echo ($initial + $unit); 
if($operation == '-') echo ($initial - $unit); 

のようなものを使用する必要が

それらの間の算術演算の結果をエコーすることが、私はIFせずにこれを行うことができます方法はありますか?

+1

が重複する可能性を乗じて不正行為( http://stackoverflow.com/questions/2552052/variable-operators-in-php) –

+1

これまでの様々な回答から、私は*なぜ?*。 –

+0

はい、これはかなり愚かでした:)私はあなたが投稿した短いIFの例に固執します。 – Alex

答えて

3

数学と策略:

echo $initial + (($operation == '-') ? -1 : 1) * $unit; 

は加算のみを使用しますが、[PHPで変数演算子]の負... :)

3

あなたは、eval付きすなわち

function add($a, $b) { return $a + $b; } 
function sub($a, $b) { return $a - $b; } 

$operations = array('+' => 'add', '-' => 'sub'); 

$operations[$operation]($initial, $unit); 
0

をマップを使用することができます。

ただし、ホワイトリストの検証を行ってから、何かをevalに送ってください。

if(in_array($operation, array('+', '-'))){ 
    eval('echo $initial '.$operation.' $unit;'); 
} 
+0

eval()を使用することはできますが、実際には使用しないでください。特に、より良いオプションがある場合。 –

+1

「これまでにホワイトリストの検証をしていることを確認してください...」これはあなたに何かを伝えますか?私は例を追加しました。私に教えて、何が間違っているのかを説明してください。あなたがあなたの検証をしなければ、 "あなたは本当に" PHPで多くのことをすべきではありません。この原則に従えば、ユーザーが入力した情報をデータベースに入れてはいけませんが、依然としてそうした傾向があります。 –

+0

私は、例を使ってあなたの編集をより明快に+安全にすると思います。しかし、あなたはいつも誰かがevalリンクを見て、ホワイトリストの部分を得るために戻ってこないという危険性があります:) –

1
echo ($operation == '+') ? $initial + $unit : $initial - $unit; 
+0

'echo $ initial +($ operation == '+'?$単位: - $単位);' –

関連する問題