3

皆さん、これはおそらくほとんどの人にとって簡単な質問です。しかし、変数に保存された演算子記号を使用して操作を実行する方法について混乱しています。例。

$first=5;
$second=5;
$operator="+";

$result=$first.$operator.$second;

echo $result;

ただし、$resultは5+5を出力するだけです。操作を実行してほしい。

私の考えは、すべての操作をif条件-> if($ operator =='+'){第1オペランドと第2オペランドを追加}に置くことです。他のアイデアはありますか?

4

4 に答える 4

8

を使用する代わりに、内部eval()でカスタム関数を試すことができます。switch()

$first = 5;
$second = 3;
$operator = '+';

$result = mathOp($operator, $first, $second);
echo $result;

function mathOp($operator, $n1, $n2){
    if(!is_numeric($n1) || !is_numeric($n2)){
        return 'Error: You must use numbers';
    }
    switch($operator){
        case '+':
            return($n1 + $n2);
        case '-':
            return($n1 - $n2);
        case '*':
            return($n1 * $n2);
        case '/':
            if($n2 == 0){
                return 'Error: Division by zero';
            }else{
                return($n1 / $n2);
            }
        default:
            return 'Unknown Operator detected';
    }
}
于 2013-03-15T13:53:47.247 に答える
1

eval()PHP操作を実行するを使用する必要があります。

$first=5;
$second=5;
$operator="+";

$term = $first.$operator.$second;
eval("$result = " . $term);

echo $result;

ただし、evalではすべてのPHP関数を実行することに注意してください。(幹部でさえ..)

于 2013-03-15T13:53:25.133 に答える
0

Evalは1つの解決策ですが、他にもあります。数学パーサーをSOで検索すると、多くの答えが見つかります。これは良い例です。

したがって、基本的には、eval()最初に検証を行うか、evalMathなどのカスタム数学パーサーを選択します。

単純な操作(+、-、*、/)と2つの演算子のみを探している場合は、パラメーターの検証関数(数値のみ、既知の演算子のみ)を使用し、evalを使用します。複雑な操作(括弧、変数など)を解析できるようにしたい場合は、パーサーを使用してください。

于 2013-03-15T13:47:21.153 に答える
-8

あなたが使用するとき、あなたはあなた自身の構文で遠くはありません

$first.$operator.$second;

文字通り文字列を一緒に追加しているので、メソッドを正常に使用するには「+」演算子を使用する必要があります。以下のコードを参照して、試してテストしました

    $first = 5;
    $second = 5;
    $operator = '+';

    $result = $first+$operator+$second;

    echo $result;

?>
于 2013-03-15T14:33:37.220 に答える