2013-05-27 6 views
1

Я борюсь с некоторым предложением if-else и хотел бы посоветовать, как установить логику.Как использовать else/elseif?

У меня есть следующий код:

//if isset a or b 
if (isset(a) || isset(b)) { 
     //if isset a 
    if (isset(a)) { 
      switch(a) { 
       case '1' : $num = '1'; 
       break; 
       case '2' : $num = '2'; 
       break; 
       case '3' : $num = '3'; 
       break; 
      } 
    //if not isset a check b for $num 
     } else if (isset(b)) { 
      switch(b){ 
       case '1' : $num = '1'; 
       break; 
       case '2' : $num = '2'; 
       break; 
       case '3' : $num = '3'; 
       break; 
      } 
     } 
//if not isset a and b, set default 
} else { 
     $num = '1'; 
    } 

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

Спасибо большое.

+0

Ваш 'else if (isset (b))' не требуется, потому что если 'a' не задано, тогда' b' должен быть установлен из-за вашего предложения first if. Вы можете просто использовать 'else' – Chris

+0

Что делать, если оба установлены? – bfavaretto

+0

Ну, это зависит от его потребностей. Если 'a' является более важным, чем' b', он должен вместо этого использовать 'else'. Если нет, он может оставить это так. – Chris

ответ

3

Вообще, если ваша if-else структура слишком сложна (более двух уровней фигурных скобок), это самое лучшее время для разделяй и властвуй подход: создавать функции, которые решают отделенных проблемы.

function getNum(&$a, &$b, $options) { 
    if(isset($a) && in_array($a,$options)) return $a; 
    if(isset($b) && in_array($b,$options)) return $b; 
    return 1; 
} 

$options = array(1,'2','whatever'); 
$num = getNum($a,$b,$options); 

При таком подходе проблема является лишь вопросом тела функции, так что вы можете решить separatedly от остальной части кода. И это желаемая легко ремонтируемая структура.

+0

Привет и спасибо. Мне жаль, что я ошибся. Мысль сократить код и не думал только о 1 и 2, есть намного больше вариантов, чем только 2 от коммутатора. Поэтому я обновил код. – bonny

+0

Я вижу - я обновил ответ - см. Последнюю часть кода. –

+0

Хорошо, это тихо, но работает, только если a и b являются числовыми. в моем случае a и b содержат строки. – bonny

1

Вы можете избежать проблем с потоком управления, используя следующий метод.

if(isset(a)) { 
    $num = a; 
} else if(isset(b)) { 
    $num = b; 
} 

$arr = array('1', '2', '3'); 
if(!in_array($num, $arr)) { 
    $num = '1'; 
} 
+0

привет и спасибо. Мне жаль, что я ошибся. Мысль сократить код и не думал только о 1 и 2, есть намного больше вариантов, чем только 2 от коммутатора. Поэтому я обновил код. – bonny

+0

@bonny Обновлено для обработки любого числа, которое вы хотите добавить позже. – andre

0
//default 
$num = '1'; 

if(isset(a)) { 
    $num = a; 
} else if(isset(b)) { 
    $num = b; 
} 
+0

Моя единственная проблема с этим - мы не знаем, что id '$ num = a' действителен. Если это хорошее решение. – andre

2

Вообще, если если-иначе структура слишком сложно (? Более двух уровней фигурные скобки), это самое лучшее время для разделяй и властвуй подход: создавать функции, которые решают отделенных проблемы.

  1. Хотя это правильно, ваша структура является приемлемым. Большинство программистов пожелают, что это изменено, но если вам удобно работать таким образом, и вы это понимаете, он все равно будет работать.
  2. Во-вторых, ваш else if (isset(b)) может быть или не быть необходимым на основе того, могут ли быть установлены оба параметра. Если они не могут, вы можете просто заменить свой else if (isset(b)) на else.

Хорошо, я не уверен, нужно ли вам это, но вот краткое объяснение if, else if и else.

if (condition) Используется для проверки того, является ли условие истинным или ложным. Если это правда, выполняется код между { и }. В противном случае это не так.

else if требует, чтобы вышеуказанное состояние if было ложным. Если ваше условие if является ложным, но любое последующее else if истинно, то будет выполнено else if.

И наконец, если все условия if и else if возвращены false, то код else выполнен.

Надеюсь, это поможет.

Смежные вопросы