1

本当に簡単な質問。>= <= と == を変数に格納して、場合に応じて特定の if ステートメントに吐き出すのが理想的な作業の問題に遭遇しました。

$numb1 = 5
$numb2 = 10
$option = >=

if($numb1 $option $numb2)
4

4 に答える 4

1

これをテストするための変数を制御命令に入れることはできません。これはいくつかを返します:syntax error, unexpected T_VARIABLE

eval()を使用してそれを行うこともできますが、お勧めできません。

おそらく、次のようにして何か違うものを作ることができます:

$option=$_GET['option']; // or POST or something else...
$numb1 = 5;
$numb2 = 10;

switch($option) {
 case ">=":
    if($numb1 >= $numb2){//someting}
    break;
 case "<=":
    if($numb1 <= $numb2){//someting}
    break;
 case "==":
    if($numb1 == $numb2){//someting}
    break;
 default://something else if there is no $option
    break;
}

または次のような機能で

function testVar($numb1,$numb2,$option)
{
   // Same switch
}
于 2013-02-14T02:10:00.050 に答える
1

eval()一般的に悪い考えと見なされている使用せずにはいられません

于 2013-02-14T01:55:15.673 に答える
1

そのように直接行うと、eval()を使用した場合にのみ機能します- eval の使用は良い習慣とは見なされません。主な問題は、eval() ステートメントがユーザー入力を受け取る場合、ユーザーがコードに php を挿入できることです。それは明らかに悪いことです。このスレッドを参照してください - PHP で eval が悪になるのはいつですか?

あなたがやった方が良いのは、「より大きい」、「より小さい」、「等しい」などのさまざまな操作すべてに対して一連のswitchステートメントを作成することです...

于 2013-02-14T01:59:42.547 に答える
1

これを行う最善の方法は、関数呼び出しまたはオブジェクト ラッパーを作成し、関数を呼び出して同じ結果を得ることです。

例:

$func = '__my_eq_op_';


if ($func($numb1,$numb2)) {
  // Do stuff
}

演算子関数は次のとおりです...

function __my_eq_op($a,$b) {
  return $a == $b;
}

function __my_gte_op($a,$b) {
  return $a >= $b;
}

function __my_lte_op($a,$b) {
  return $a <= $b;
}

例えば。したがって、代わりに関数を使用するように分解することができます。

このため:

もし ($x == $y)

パーサーは 6 つのトークンを認識します... 1) キーワード IF: 2) LPAREN 3) VAR X 4) EQ 5) VAR Y 6) RPAREN

パーサーはこれらのトークンを使用して、IF 条件の AST を構築します。あなたの考えは、「==」を変数として見ないようにする必要があります。オペレーターです!

于 2013-02-14T02:06:14.223 に答える