2015-08-15 90 views
0

所以我有这个块的代码:

$age = 23; 
    $gender = 0; 

    $rules = "gender = 0 AND (age >= 2 AND age <= 20)"; 
    $find = array(
     ' = ', 
     'age', 
     'gender' 
    ); 
    $replace = array(
     ' === ', 
     '$age', 
     '$gender' 
    ); 
    $rules = str_replace($find, $replace, $rules); 
    print($rules); 
    if (eval('return' . $rules . ';')) { 
     return "You get coupon " . $coupon->couponID . "!"; 
    } else { 
     return "Coupon " . $coupon->couponID . " is not for you!"; 
    } 

我所试图做的是使用的字符串变量作为我如果表达。这可能吗?或者有更好的方法来实现这一目标?

+0

if($ rules)''怎么办? – arkascha

+0

这是我的原始代码。它不起作用。始终返回true。 :( – RhanCandia

+0

@arkascha - 由于'$ rules'不是'false'或'null',它总会返回'true'。 – Tigger

回答

0

修正了它。问题与===作为比较。当我用==代替时,它工作正常!

现在的代码如下。

$rules = "$age >= 2 AND $age <= 20 AND ($gender = 1 OR $gender = 2)"; 
    $find = array(
     ' = ', 
     'age', 
     'gender' 
    ); 
    $replace = array(
     ' == ', 
     '$age', 
     '$gender' 
    ); 
    $rules = str_replace($find, $replace, $rules); 
    print($rules); 
    if (eval(sprintf('return (%s);', $rules))) { 
     return "You get coupon " . $coupon->couponID . "!"; 
    } else { 
     return "Coupon " . $coupon->couponID . " is not for you!"; 
    }