用数字评估合并运算符

时间:2018-11-23 16:01:28

标签: php operators eval concat

我正为一小段不想自我评估的代码而苦苦挣扎:

$t = 5;
$s = "<=";
$r = 6;

var_dump($t.$s.$r);

这是有意义的var_dump返回"5<=6",但我只是想告诉我 5的布尔值是否小于或等于6

我想知道除了使用eval()还是在所有可能的运算符之间进行切换之外,还有没有其他方法可以获取此布尔值

谢谢。

2 个答案:

答案 0 :(得分:1)

如果您想要一个安全,灵活的解决方案,则可以定义一个方法,该方法将根据与数组中的键匹配的运算符来执行,该方法仅适用于两个操作数,但是示例{{1中的最后一个}}只需将第一个值乘以4并返回值...

#

给予...

$operators = [ "<=" => function ($a, $b) { return $a <= $b;},
    "<" => function ($a, $b) { return $a < $b;},
    ">=" => function ($a, $b) { return $a >= $b;},
    ">" => function ($a, $b) { return $a > $b;},
    "#" => function ($a) { return $a * 4; }];

$t = 5;
$s = "<=";
$r = 6;
var_dump($operators[$s]($t,$r));

$s = "<";
var_dump($operators[$s]($t,$r));

$s = ">=";
var_dump($operators[$s]($t,$r));

$s = ">";
var_dump($operators[$s]($t,$r));

$s = "#";
var_dump($operators[$s]($t,$r));

这有点令人费解,但又可扩展且安全。

答案 1 :(得分:0)

尽管通常不建议使用代码这样的代码(评估存储为纯文本的代码),但确切地说有一个函数:eval()

eval()做PHP希望做的事情:评估存储在字符串中的有效代码。

eval("var_dump(".$t.$s.$r.");");可以完成工作-但是,由于这些变量中的任何代码都可以毫无疑问地执行,因此可能会带来安全风险,或者至少会引入一些难以调试的错误。 (要使eval中的代码实际有效,必须使用多余的引号和;