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
}
希望我已经对此做了很好的解释,非常感谢任何帮助。
更新:感谢您为我回答这个问题并快速加入。在这里学到了一点!!
答案 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
的诱惑,除非你想投入很多的时间来消毒这三个参数。
答案 1 :(得分:1)
答案 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
。