2

私は3つの変数を持っています:

$left_side = "'Username'";
$equation = "==";
$right_side = "'Username'";

次のようなifステートメントであるため、これらの変数をテストしたいと思います。

if($left_side $equation $right_side) {
    // do something
} else {
    // do something else
}

私はこれがうまくいくことを知っています:

if(eval("return ".$left_side." ".$equation." ".$right_side.";")) {
    // do something
} else {
    // do something else
}

私はいつもevalを使うのは「良くない」と思っていました。特にユーザー入力を実行しようとする場合。

これを行う他の方法はありますか?私はそれをグーグルしようとしました、しかしそれは今日の私の友人ではありません;)

4

5 に答える 5

3

あなたはこのようなことをするかもしれません:

function testValues($val1, $equation, $val2) {
   $res = false;
   switch($equation) {
      case "==":
          $res = $val1 == $val2;
          break;
      case ">":
          $res = $val1 > $val2;
          break;
      //....
      default:
         throw new Exception("Unknown operator");
   }
   return $res;
}

そしてそれを次のように使用するよりも:

 if(testValues($left_side,$equation,$right_side)) {
     //do something
 } else {
    //do something
 }
于 2013-03-26T08:06:23.613 に答える
2

eval悪です。いいえ、他に(簡単な)解決策はありませんが、おそらくこれが役立ちます:

if ($equation == "==") {
    if ($left_side == $right_side) {
        // ... your code goes here.
    } else {
        // Do some other stuff.
    }
}
于 2013-03-26T08:02:07.487 に答える
2

あなたはスイッチを使うことができます:

$left_side = "'Username'";
$equation = "doublequal";
$right_side = "'Username'";

switch($equation){
    case 'doublequal':
        if ($left_side == $right_side) {
             // code
        }
    break;
    //......
}

eval()特にユーザー入力で使用しないでください。

于 2013-03-26T08:02:40.777 に答える
0

eval()は悪ですが、call_user_func()も悪であり、すべてのフレームワークがこの関数をどこかで使用します。

ツールは悪ではありません。それらは単なるツールです。悪は私たちがそれらを使用する方法です。

ベンおじさんが言ったように:大きな力には大きな責任が伴います:)

于 2013-03-26T17:55:18.757 に答える
-2

私はこのトリックを見つけます

http://gonzalo123.com/2012/03/12/how-to-use-eval-without-using-eval-in-php/

アイデアは、PHPソースコードを使用して一時ファイルを作成し、このファイルを標準のPHPのinclude関数にインクルードし、一時ファイルを破棄することです。

于 2013-03-26T08:12:08.500 に答える