2010-07-05 54 views
5

我知道這可能是一個簡單的問題,但想知道關於此的每一個意見。Switch和IF有什麼區別?

在開關和IF函數之間的區別是什麼?我可以看到的是,凡是「開關」功能使用「中頻」功能也適用於那裏..如果我錯了我糾正我。

或兩者之間的任何性能明智的區別?

+0

我想答案是「它取決於」或「沒有性能差異」,但我會首先要求一個例子.. – 2010-07-05 10:39:42

回答

19

或兩者之間的任何性能明智差異?

忘掉這個級別上的性能差異 - 可能是微觀的,但只有在進行數十萬次操作時(如果有的話),您纔會感受到它。 switch是爲了更好的代碼的可讀性和可維護性的構建:

switch ($value) 
{ 
case 1: .... break; 
case 2: .... break; 
case 3: .... break; 
case 4: .... break; 
case 5: .... break; 
default: .... break; 
} 

主要是更清潔和可讀性比

if ($value == 1) { .... } 
elseif ($value == 2) { .... } 
elseif ($value == 3) { .... } 
elseif ($value == 4) { .... } 
elseif ($value == 5) { .... } 
else { .... } 

編輯:由庫亨的評論啓發,爲了完整性一些benchmarks(結果會有所不同,這是一個活的)。請記住,這些是運行1000次的測試。一對if的差異是完全可以忽略

  • 如果和ELSEIF(使用==)174微秒
  • 如果,ELSEIF和else(使用==)223微秒
  • 如果,ELSEIF和else(使用===)130微秒
  • 開關/殼體183 微秒
  • 開關/殼體/默認215微秒

結論(來自phpbench.com)

使用switch /箱或如果/ elseif的幾乎是相同的。請注意,測試未執行===(正好等於),並且稍微比使用==(等於)要快。

+0

特別是當有超過3個選項時。+1 – 2010-07-05 10:44:50

+0

完全同意 - 過於強調微觀優化總是會犧牲可讀性。就個人而言,除了單一的if/else外,爲了完整起見,我總是使用switch語句 – robjmills 2010-07-05 10:45:34

+2

,if-else比switch更快一些。但是,在這個級別(尤其是PHP)可讀性>性能。 – Kuchen 2010-07-05 10:53:23

3

如果您有簡單的條件,比如某件事等同於其他事物,那麼一個開關就是理想的。

例如,而不是做了以下內容:

if($bla == 1) { 

} elseif($bla == 2) { 

} elseif($bla == 3) { 

} etc... 

這是更好地做這樣的:

switch($bla) { 
    case 1: 
    ... 
    break; 
    case 2: 
    ... 
    break; 
    case 3: 
    ... 
    break; 
    default: 
    ... 
    break; 
} 

或者,如果你有複雜的條件下,你應該使用的if/else 。

我認爲這是所有意見的問題,但有些人根本不使用switch語句,並堅持使用if/else。

0

不過,不要忘記,開關並不一定是簡單的if語句。記住,在每種情況結束時交換機不需要中斷,並且讓中斷可以讓你'跌入'下一個案例,也可以允許一些有趣而複雜的'ifs'。

2

不,你說得對。
這些陳述之間沒有太大的區別。
你可以使用你喜歡的。

請記住,如果您必須使用超過3-4個連續條件 - 這意味着您很可能有設計缺陷。

通常,您可以用循環或更清晰的應用程序設計替換這樣的語句。

+0

關於設計的好處。一個巨大的switch語句在一個循環中幾乎總是會變得更好,或者出現錯誤。 – 2010-07-05 11:47:00

相關問題