2011-07-16 16 views
0

変数が特定の演算子であるかどうかをチェックして、コードを複製しないようにしようとしています。基本的にはオペレータ(オペランド?)をパラメータとして使用

..

$op = $_POST['operator']; 
$x = 5; 
$y = 2; 
$result = $x /* $op instead of '+'/'-'/'*'/'/'/'%' */ $y; 

が、これは可能ですか私は、文字列としてオペレータを送信し、オペレータの種類ごとにコードを複製する必要がありますか?

答えて

2

それはこのような何かをするために多くの方が安全です。

+0

かなり長いですが、 'eval()' IMHO – Sufendy

1

Ahem。あなたはevalです。

$result = eval("$x $op $y"); 

しかし、これは危険であり、あなたは細心の注意を払ってあなたの変数をサニタイズする必要があります。 「あなたの問題にevalの使用が必要な場合は、問題が間違っています」というようなメッセージが表示されます。そんな感じ。それはこのような何かをすることがほぼ確実に望ましいです:これらの線に沿って

$x = 5; 
$y = 2; 

switch($_POST['operator']){ 
    case '+': 
     $result = $x + $y; 
     break; 
    case '-': 
     $result = $x - $y; 
     break; 
    case '*': 
     $result = $x*$y; 
     break; 
    case '/': 
     $result = $x/$y; 
     break; 
    case '%': 
     $result = $x % $y; 
     break; 
    default: 
     $result = 'Operator not supported'; 
} 

何か:

function apply_op($x, $y, $op) { 
    switch ($op) { 
    case '+': return $x + $y; 
    ... 
    } 
} 
+0

すべてのパラメータが適切に消毒されます。ありがとうございました! :) –

+2

evalはあなたが何か悪いことをしていることを示す印です - 大げさではありませんが、帽子でも太字でも); – hakre

+0

@hakre:私は一般的に「危険」は「間違っている」より悪いと言います。 –

0

あなたはこれを行うことができます。

$operators = array("+", "-","*","%","/"); 
$op = $_POST["operator"]; 
if(in_array($op, $operators)) { 
    echo eval("$x $op $y"); 
} else { 
    echo "Operator not supported"; 
} 
+0

よりも優れていますが、$ opはユーザの入力であるため、この場合は非常に危険です。ユーザーは、危険なPHPコードを実行するなど、何かを入力することができます。 – Sufendy

関連する問題