if语句的构建条件比较

Phi*_*ord 2 php comparison if-statement dynamic

这可能吗?

$var_1 = 1;
$var_2 = 10;
$comparison = '>';

if($var_1 $comparison $var_2) {
    // do something...
}
Run Code Online (Sandbox Code Playgroud)

现在的语法无效,但有没有办法做到这一点?

mar*_*rio 9

不是本地的(当然除外eval).您需要自己评估各种表达方式.构建包装函数并使用switch语句.或者对于非表达式比较一个简单的映射:

$var_1 = 1;
$var_2 = 10;
$comparison = '>';

$map = array(
    ">" => $var_1 > $var_2,
    "<" => $var_1 < $var_2,
    "==" => $var_1 == $var_2,
    "!=" => $var_1 != $var_2,
);

if($map[$comparison]) {
    // do something...
}
Run Code Online (Sandbox Code Playgroud)


mki*_*nas 5

有可能

if (eval("{$var_1} {$comparison} {$var_2}")) {
Run Code Online (Sandbox Code Playgroud)

eval强烈建议不要这样做,只有当你无法取得理想的结果时才这样做

编辑 正如@mario所说,直到PHP 5.3这不起作用.在5.3中它确实如此.所以对于旧版本应该是

if (eval("return {$var_1} {$comparison} {$var_2};")) {
Run Code Online (Sandbox Code Playgroud)