在条件中动态设置比较规则?

时间:2014-12-19 21:34:03

标签: php dynamic

我有三个用户可以配置的规则:

1-无论是否有效,如果它处于活动状态,我必须在条件中使用它。

2-用户可以将规则行为设置为“&&”或'或'。

3-最后,用户可以设置规则的值。

例如,设置此规则;

规则1,主动:是,行为:或,值15。

规则2,活跃:是,行为:或者,值35。

规则3,主动:是,行为:或,值55。

我必须建立一个有条件的 这样:

if($varX < 15 or $varY < 35 or $varZ < 55)
{
  .
  .
  .
}

我怎样才能完成这个?

1 个答案:

答案 0 :(得分:1)

不要尝试动态地“构建”这样的语句并执行它(这将是脆弱的) - 而是单独找出表达式的结果,并通过和/或之后连接它们的值......

像这样的东西,(伪代码)

result = true;
if(rule_active) {
  if(rule_behavior is or) {
    result || (rule_var < rule_value);
  }
  else {
    result && (rule_var < rule_value);
  }
return result or do whatever with it …

(此处为and&&交换了or ||,因为使用这些更为常见;您当然可以保留and和{{ 1}}如果你愿意,你只需要知道不同的运算符优先级。)

当然,如果您不是只想按顺序将一个规则的结果加入到下一个规则中,那么这可能仍然存在问题,同时还要考虑or布尔逻辑中的优先级高于and ......但到目前为止,这不是你问题的一部分 如果您也想要考虑到这一点,那么您需要找出正确的“订单”,以便事先进行检查和加入。 (即便如此,结果可能不是用户想到的 - 所以也许你需要找到一种方法让用户引入“括号”进行分组以构建规则集......?真的取决于复杂性当前的实际任务。)