我應該使用方法還是常量標誌? (Should I use methods or constant flags?)


問題描述

我應該使用方法還是常量標誌? (Should I use methods or constant flags?)

If I have a database table containing a flag that can have multiple states, should I do this

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

or this

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;
}

?

‑‑‑‑‑

參考解法

方法 1:

Whichever makes sense, of course.

The switch looks much cleaner.  But, what is this 'state' you are checking?  If you're translating a string, use an array, for example.

The if has different behavior from switch.  The method calls MAY have side effects.  The if is better if multiple states may be active on the object at once, though.

方法 2:

From an OO perspective, both are discouraged. If you have different state, you may want to create a virtual methods, and override it in inherited class. Then based on polymorphism, you can avoid the if, and switch statement.

方法 3:

The second option just seems to be the better solution. IMHO, the unsightly duplication of the comparison code that would accompany the methods of the first solution would be the show‑stopper for me, for example:

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;
  }
}

Of course, others might disagree. I just don't like having classes cluttered up with 'almost the same' methods.

(by Chad JohnsonstragerJ.W.karim79)

參考文件

  1. Should I use methods or constant flags? (CC BY‑SA 3.0/4.0)

#if-statement #PHP #switch-statement






相關問題

Python 和 if 語句 (Python and if statement)

Ruby 一種在條件下執行函數的巧妙方法 (Ruby a clever way to execute a function on a condition)

為什麼我的 php 代碼繞過了一些 if 語句? (Why is my php code bypassing a few if statements?)

為什麼“如果”不是C中的表達式 (Why isn't "if" an expression in C)

如何對此查詢進行選擇案例? (How can I do select case to this query?)

我應該使用方法還是常量標誌? (Should I use methods or constant flags?)

PHP - 使用哪個條件測試? (PHP - Which conditional test to use?)

如果日期較新,則將日期從一個數據幀替換為另一個數據幀 (Replace date from one dataframe to another if it's newer)

BASH:在 for 循環中使用 continue (BASH: Using a continue in a for loop)

有沒有辦法從 Tableau 中的 regexp_match 語句中排除某些關鍵字? (Is there a way to exclude certain keywords from a regexp_match statement in Tableau?)

Excel 如果單元格為空白單元格總數的空白單元格總數 (Excel If cell is blank sum number of blank cells for a total)

使用另一個數據框的條件創建一個新列 (Create a new column with a condition of another dataframe)







留言討論