我正为一小段不想自我评估的代码而苦苦挣扎:
$t = 5;
$s = "<=";
$r = 6;
var_dump($t.$s.$r);
这是有意义的var_dump返回"5<=6"
,但我只是想告诉我 5的布尔值是否小于或等于6 。
我想知道除了使用eval()
还是在所有可能的运算符之间进行切换之外,还有没有其他方法可以获取此布尔值
谢谢。
答案 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中的代码实际有效,必须使用多余的引号和;
)