如果有条件,条件声明不起作用?

时间:2014-11-05 07:56:26

标签: php if-statement conditional-statements

我正在使用动态脚本来动态创建条件,如

$condition_string =  '1==0 AND 1==1';

当我尝试在if条件下使用变量时,它不起作用。

if($condition_string) {

  // do something

}

但是,如果我使用

if(1==0 AND 1==1) {

  // do something

}

然后它有效。

有人可以告诉如何在条件下使用变量吗?

4 个答案:

答案 0 :(得分:1)

$condition_string =  '1==0 AND 1==1';

if($condition_string) {
  // do something
}

if语句中的条件在评估之前将为converted to boolean。除非字符串为空字符串或字符串TRUE,否则字符串将被评估为"0"。因此,您的上述条件将始终如此。

一种选择是使用eval来评估if之外的条件:

eval ('$condition_string = (1==0 OR 1==1);');

if($condition_string) {
  // do something
}

请注意,AND低于<{em} precedence而不是=运算符,因此您必须在表达式周围使用括号。如果您使用{em>高于优先级高于&&的{​​{1}}运算符,则无需执行此操作。

还请注意eval manual page中的警告:

  

注意

     

eval()语言构造非常危险,因为它允许执行任意PHP代码。因此不鼓励使用它。如果您已经仔细验证除了使用此构造之外没有其他选择,请特别注意不要将任何用户提供的数据传递到其中,而不事先正确验证它。

答案 1 :(得分:1)

我会创建一个使用eval的函数,但请注意PHP manual for eval中说明的内容:

  

注意   eval()语言构造非常危险,因为它允许执行任意PHP代码。因此不鼓励使用它。如果您已经仔细验证除了使用此构造之外没有其他选择,请特别注意不要将任何用户提供的数据传递到其中,而不事先正确验证它。

function eval_str($string) {
    return eval("return $string;");
}

然后你就可以这样称呼它

$condition_string = '1==0 AND 1==1';
if(eval_str($rule_condition_string)) { // false
    // code
}

答案 2 :(得分:0)

您应该使用eval函数来构建和评估动态脚本,所以:

 eval("if($condition_string){ /*do here what you need*/ }else{ /*...*/}");

可以胜任。

答案 3 :(得分:0)

还有另一种方法,尽管它涉及的更多一些。但是,它避免使用eval,如下所示:

<?php
$condition_string =  '1==0 || 1==1';
$arr = preg_split("/[ ==||]+/",$condition_string );
$callback = function( $s ){
    return (int) $s;
};
$arrNums = array_map( $callback,$arr );
list( $n1, $n2, $n3, $n4 ) = $arrNums;
if (($n1 == $n2 ) || ( $n3 == $n4 )) {
    echo "result of logical ||: this works\n";
}
// result of logical ||: this works

preg_split搜索字符串是否包含空格,==或||。如果是这样,字符串将被拆分为仅包含数字的字符串数组。 Arrap_map创建一个新数组,其中包含与$ arr中每个数字字符串对应的整数。 $ arrNums被拆分为一个列表,其中包含采用其值的变量。 if条件比较每对数字是否相等。由于代码使用逻辑||运算符,当第二对数字的计算结果为真时,条件也会以输出的确认字符串的最终结果计算为真。