在if语句中使用变量

时间:2013-07-26 15:26:47

标签: php variables if-statement

PHP新手在这里。我搜索了这个,但我确定我没有在我的问题上使用正确的语法。如果这是重复的话,请道歉:

我有这三个变量:

$param = get_sub_field('custom_parameter');
$compare = get_sub_field('parameter_compare');
$param_val = get_sub_field('parameter_value');

每个人都会回复:

$param is 'my_parameter'
$compare is either '==', '<=', or '=>'
$param_val is something like '5' or any value that the user sets

我所拥有的是一个编辑界面,用户可以在其中设置参数名称,设置比较然后添加值。为此,他们还可以添加参数匹配时发生的操作。我和$ _GET一起使用它。

我想做的是将上面的每个变量插入到我的if语句中,以便比较由用户创建。但是,当我尝试这样做时,它一直给我一个错误:

if($_GET[$param] $compare $param_val) {
// do something
}

我得到的错误是:

  

解析错误:语法错误,意外T_VARIABLE

这当然很好用:

if($_GET[$param] == $param_val) {
// do something
}

希望我已经对此做了很好的解释,非常感谢任何帮助。

更新:感谢您为我回答这个问题并快速加入。在这里学到了一点!!

5 个答案:

答案 0 :(得分:4)

function comparer($param, $compare, $param_val)
{
  switch ($compare){
    case '==': return $param == $param_val;
    case '!=': return $param != $param_val;
    case '<=': return $param <= $param_val;
    case '>=': return $param >= $param_val;
    case '<':  return $param <  $param_val;
    case '>':  return $param >  $param_val;
    default: return FALSE;
  }
}

/* ... */

if (comparer($param, $compare, $param_val)){
  // true
}

非常简单的方法让你前进。我会不惜一切代价抵制使用eval的诱惑,除非你想投入很多的时间来消毒这三个参数。

哦,an example

答案 1 :(得分:1)

查看eval()

http://php.net/manual/en/function.eval.php

使用此功能,您可以解析在字符串中格式化的代码。

答案 2 :(得分:1)

我想我会使用switch语句来避免任何可怕的评估代码。

如:

switch($compare) {
    case '==':
        if($_GET[$param] == $param_val) {
            // do something
        }
    break;
    case '<=':
        if($_GET[$param] <= $param_val) {
            // do something
        }
    break;
    case '>=':
        if($_GET[$param] <= $param_val) {
            // do something
        }
    break;
}

答案 3 :(得分:1)

最好的方法是为此制作一个功能。让该函数使用switch来确定运算符,然后返回比较。

function compare($a, $b, $operator){
    $ret = NULL;
    switch($operator){
        case '==':
            $ret = $a == $b;
            break;
        case '>=':
            $ret = $a >= $b;
            break;
        case '<=':
            $ret = $a <= $b;
            break;
    }
    return $ret
}

然后只需简单地称呼它:

if(compare($_GET[$param], $param_val, $compare)){
    // do something
}

答案 4 :(得分:0)

嗯有趣的是,我想我会像这样接近它(未经测试):

function comparison($param, $compare, $param_val) {
    if ($compare == '==') {
        if ($param == $param_val) {
            return true
        }
    }
    if ($compare == '<=') {
        if ($param <= $param_val) {
            return true
        }
    }
    if ($compare == '>=') {
        if ($param >= $param_val) {
            return true
        }
    }
}

效率不高或DRY,可能会使用开关,因为这可能会更好,但这是我头脑中的第一件事。

<强>用法

if (comparison($param, $compare, $param_val)) {
    echo 'it's true';
} else {
    echo 'it's false';
}  

修改

按照惯例,我被更好的代码打败了:)

P.S。我不确定你为什么$param然后使用$_GET[$param]所以我在答案中使用了$param