真的很简单的问题。我遇到了一个工作问题,将 >= <= 和 == 存储到一个变量中以便在任何情况下都吐出某些 if 语句是理想的。
$numb1 = 5
$numb2 = 10
$option = >=
if($numb1 $option $numb2)
真的很简单的问题。我遇到了一个工作问题,将 >= <= 和 == 存储到一个变量中以便在任何情况下都吐出某些 if 语句是理想的。
$numb1 = 5
$numb2 = 10
$option = >=
if($numb1 $option $numb2)
并非没有使用eval()
通常被认为是一个坏主意
直接这样做,只能使用eval() - 使用 eval 不被认为是好的做法。主要问题是如果 eval() 语句接受用户输入,则用户可以将 php 注入您的代码中。这显然很糟糕。请参阅此线程- php 中的 eval 何时是邪恶的?
你最好做的是为所有各种操作创建一系列 switch 语句,例如“大于”、“小于”、“等于”等等......
对此最好的做法是进行函数调用或对象包装,然后调用该函数以达到相同的结果。
例子:
$func = '__my_eq_op_';
if ($func($numb1,$numb2)) {
// Do stuff
}
然后操作员函数...
function __my_eq_op($a,$b) {
return $a == $b;
}
function __my_gte_op($a,$b) {
return $a >= $b;
}
function __my_lte_op($a,$b) {
return $a <= $b;
}
例如。所以你真的可以把它分解成使用函数。
为了这:
如果 ($x == $y)
解析器看到 6 个标记... 1) KEYWORD IF: 2) LPAREN 3) VAR X 4) EQ 5) VAR Y 6) RPAREN
解析器使用这些标记为 IF 条件构造 AST。您的想法需要远离将“==”视为变量。是运营商!
您不能在控制指令中放置一个 var 来测试它。这将返回一些:syntax error, unexpected T_VARIABLE
您可以使用一些 eval() 来执行此操作,但不建议这样做。
也许您可以通过以下方式做出不同的事情:
$option=$_GET['option']; // or POST or something else...
$numb1 = 5;
$numb2 = 10;
switch($option) {
case ">=":
if($numb1 >= $numb2){//someting}
break;
case "<=":
if($numb1 <= $numb2){//someting}
break;
case "==":
if($numb1 == $numb2){//someting}
break;
default://something else if there is no $option
break;
}
或使用如下功能
function testVar($numb1,$numb2,$option)
{
// Same switch
}