是否可以使用PHP if语句包含所有变量?

时间:2013-02-14 01:54:20

标签: php if-statement

真的很简单的问题。我遇到过一个工作问题,理想的做法是将> =< =和==存​​储到一个变量中,以便在任何情况下吐出某些if语句。

$numb1 = 5
$numb2 = 10
$option = >=

if($numb1 $option $numb2)

4 个答案:

答案 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
}