所以我有以下内容:
$a = 3;
$b = 4;
$c = 5;
$d = 6;
Run Code Online (Sandbox Code Playgroud)
我做了一个比较
if($a>$b || $c>$d) { echo 'yes'; };
Run Code Online (Sandbox Code Playgroud)
一切正常.是否可以使用变量代替运算符?就像是:
$e = ||;
Run Code Online (Sandbox Code Playgroud)
我可以用它作为
if($a>$b $e $c>$d) { echo 'yes'; };
Run Code Online (Sandbox Code Playgroud)
Kri*_*her 23
不,该语法不可用.您可以做的最好的是eval(),这是不推荐的,特别是如果$ e来自用户输入(即表单),或者每个运算符作为一个case的switch语句
switch($e)
{
case "||":
if($a>$b || $c>$d)
echo 'yes';
break;
}
Run Code Online (Sandbox Code Playgroud)
Wil*_*den 12
这是不可能的,但你可以使用一个函数.当然,你必须自己定义它们.使用PHP 5.3的闭包这将非常简单:
$or = function($x, $y)
{
return $x || $y;
};
if ($or($a > $b, $c > $d))
{
echo 'yes';
};
Run Code Online (Sandbox Code Playgroud)
对于将来的搜索者,当我需要添加一些模糊且未定义的“附加条件”以缩小产品范围时,我想到了这个功能。
/**
* Criteria checker
*
* @param string $value1 - the value to be compared
* @param string $operator - the operator
* @param string $value2 - the value to test against
* @return boolean - criteria met/not met
*/
protected function criteriaMet($value1, $operator, $value2)
{
switch ($operator) {
case '<':
return $value1 < $value2;
break;
case '<=':
return $value1 <= $value2;
break;
case '>':
return $value1 > $value2;
break;
case '>=':
return $value1 >= $value2;
break;
case '==':
return $value1 == $value2;
break;
case '!=':
return $value1 != $value2;
break;
default:
return false;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
(编辑)这是我的用法:
// Decode the criteria
$criteria = json_decode($addl_criteria);
// Check input against criteria
foreach ($criteria as $item) {
// Criteria fails
if (!criteriaMet($input[$item->key)], $item->operator, $item->value)) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13080 次 |
| 最近记录: |