我应该使用方法还是常量标志?

时间:2009-03-28 02:08:19

标签: php switch-statement if-statement

如果我有一个包含可以有多个状态的标志的数据库表,我应该这样做吗

if ($Object->isStateOne()) {
  // do something
}
else if ($Object->isStateTwo()) {
  // do something else
}
else if ($Object->isStateThree()) {
  // do yet something else
}

或者

switch ($Object->getSomeFlag()) {
  case ObjectMapper::STATE_ONE:
    // do something
    break;

  case ObjectMapper::STATE_TWO:
    // do something else
    break;

  case ObjectMapper::STATE_THREE:
    // do yet something else
    break;
}

3 个答案:

答案 0 :(得分:2)

当然,无论哪个都有道理。

开关看起来更干净。但是,你正在检查这个'状态'是什么?如果要翻译字符串,请使用数组,例如。

if与switch有不同的行为。方法调用MAY可能有副作用。如果多个状态可以同时在对象上激活,则if更好。

答案 1 :(得分:2)

从OO的角度来看,两者都是沮丧的。如果您具有不同的状态,则可能需要创建虚方法,并在继承的类中覆盖它。然后基于多态性,可以避免使用if和switch语句。

答案 2 :(得分:1)

第二种选择似乎是更好的解决方案。恕我直言,第一个解决方案的方法伴随的比较代码的难看的重复将是我的节目,例如:

public function isStateOne() {
  if(strcmp(ObjectMapper::STATE_ONE, '1') == 0) {
      return true;
  }
}
public function isStateTwo() {
  if(strcmp(ObjectMapper::STATE_TWO, '2') == 0) {
      return true;
  }
}
public function isStateThree() {
  if(strcmp(ObjectMapper::STATE_THREE, '3') == 0) {
      return true;
  }
}

当然,其他人可能不同意。我只是不喜欢让课程与“几乎相同”的方法混在一起。