真的很简单的问题。我遇到过一个工作问题,理想的做法是将> =< =和==存储到一个变量中,以便在任何情况下吐出某些if语句。
$numb1 = 5
$numb2 = 10
$option = >=
if($numb1 $option $numb2)
答案 0 :(得分:1)
并非没有使用通常被认为是个坏主意的eval()
答案 1 :(得分:1)
直接这样做,只能使用eval() - 使用eval不算是一种好习惯。主要的问题是,如果eval()语句接受用户输入,用户可以将php注入您的代码。那显然很糟糕。请参阅此主题 - When is eval evil in php?
你最好做的是为所有各种操作创建一系列switch语句,例如“大于”,“小于”,“等于”等等......
答案 2 :(得分:1)
要做的最好的事情是创建一个函数调用或对象包装器,然后调用该函数来实现相同的结果。
示例:
$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;
}
例如。所以你真的可以把它分解为使用函数。
为此:
if($ x == $ y)
解析器看到6个令牌...... 1)关键词如下: 2)LPAREN 3)VAR X. 4)情商 5)VAR Y. 6)RPAREN
解析器使用这些标记为IF条件构造AST。你的想法需要远离将“==”视为一个变量。这是一个运营商!
答案 3 :(得分:1)
您无法在控制指令中输入var来测试它。
这将返回一些:syntax error, unexpected T_VARIABLE
你可以用一些eval()来做,但不建议。
Perhap你可以通过以下方式做出不同的事情:
$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
}