2010-11-22 6 views
19

У меня есть дилемма. Что лучше всего использовать и почему .. переключиться или если?Переключатель vs if statements

switch ($x) 
{ 
case 1: 
    //mysql query 
    //echo something 
    break; 
case 2: 
    //mysql query 
    //echo something 
    break; 
} 

...

if ($x == 1) { 
    //mysql query 
    //echo something  
} 

if ($x == 2) { 
    //mysql query 
    //echo something 
} 
+6

Возможный дубликат [is «else if» быстрее, чем «switch() case»?] (Http://stackoverflow.com/questions/767821/is-else-if-faster-than-switch -case) (язык в этом вопросе - это C#, но switch/case и если утверждения обычно ведут себя одинаково в PHP) – BoltClock

ответ

30

Они имеют разные значения.

Первый пример остановится при выполнении условия.

Второй будет испытывать $x дважды.

Возможно, вы захотите сделать свой второй if a else if. Это будет означать, что блок будет пропущен, как только одно условие будет оцениваться как true.

Но если вам интересно, какой из них самый быстрый, вы должны подумать , который наиболее эффективно сообщает, что я хочу делать. Они, скорее всего, окажутся условными переходами в целевой архитектуре.

Преждевременная оптимизация ... (остальное вы знаете: P)

+0

Конечно, если второй оператор if не является else if. – BoltClock

+0

Вы особенно хорошо знаете мой широкий пример! Для этого я голосую ваш ответ правильно :) – CyberJunkie

5

Во-первых, что у вас есть не то же самое

switch(value) 
    case condition1: 
    break; 
    case condition2: 
    break 

if (condition1) { 
} 
if (condition2) { 
} 

Они являются синонимами

switch(value) 
    case condition1: 
    break; 
    case condition2: 
    break 

if (condition1) { 
} 
else if (condition2) { 
} 

Второй, если вы говорите о моем втором e xample, где два являются синонимами. Затем с помощью инструкций switch можно облегчить некоторые боли при кодировании лотов if ..else if. ....

Переключатели с моей точки зрения также могут обеспечить более читабельность. Но даже тогда бывают случаи, когда использование if...else просто лучше, особенно со сложной логикой.

+1

Хорошее сравнение! Спасибо! – CyberJunkie

+0

+1 для * есть время, когда использование 'if ... else' просто лучше * ... Я всегда использую инструкции if с булевыми, поскольку это обеспечивает более легкий поток. –

7

Переключатель лучше, если имеется более двух вариантов. Это в основном для чтения кода и ремонтопригодности, а не для производительности.

Как указывали другие, ваши примеры не эквивалентны.

1

Если у вас есть одна переменная, набор возможных значений, и вы хотите выполнять разные действия для каждого значения, для этого используется случай переключения.

Операторы Switch делают более очевидным, что вы просто определяете, какое из допустимых значений имеет переменная.

Если у вас есть более сложные условия или несколько переменных для рассмотрения, используйте if-statements.

5

Оператор switch будет быстрее, потому что он проверяет значение только один раз.

1

Оба утверждения являются заявлением о принятии решений, сравнивая некоторые параметры и затем отображая результаты.оператор switch, без сомнения, быстрее, чем оператор if, но оператор if имеет большее преимущество перед оператором switch, когда вы должны использовать логические операции, такие как (<,>, < =,> =,! =, ==) , всякий раз, когда вы сталкиваетесь с логическими операциями, вы будете удалены с помощью оператора switch, но не беспокойтесь, есть другой способ, который может использоваться для достижения вашей цели, которая является if-statement или if-else или if-else-if заявление. Я предлагаю вам использовать if-else большую часть времени, а не коммутатор.