Какова наилучшая практика для завершения инструкции if … else без условия else? Рассмотрим следующий код:
$direction = $_POST['direction']; //Up or down if ($direction == "up") { code goes here... } elseif ($direction == "down") { code goes here... } else { //do nothing? } 
Как вы можете видеть, есть только 2 условия; либо вверх, либо вниз, а инструкция else не имеет цели, если вы не хотите, чтобы она отображала сообщение об ошибке.
Большую часть времени я вижу, что программисты просто ставят условие else, но вставляют комментарий вместо любого рабочего кода, подобного этому.
 else { //error messages goes here... } 
или просто предположите, что это не «вверх», тогда все остальное должно быть «вниз», так как есть только 2 условия. Если пользователь вводит «левый» или «правый», он все равно будет считаться «вниз». Я думаю, что это несколько неуместно.
 if ($direction == 'up') { code goes here... } else { code goes here... } 
Я знаю, что PHP все равно будет работать, если мы поместим if without else condition. Но что, если есть условие elseif? В таких случаях, какова наилучшая практика, если мы хотим поддерживать строгий if … else, если мы не хотим включать какие-либо сообщения об ошибках или какие-либо еще условия?
Заранее спасибо.
  нет инструкции if...else . 
  существует оператор if который может быть дополнен операторами else и elseif . 
  Таким образом, наилучшей практикой в if statement without else является условие if without else condition: 
 if (condition) { //some code } 
  Честно говоря, нет best practice .  Лучшая практика – это только одна, которая следует за логикой программы. 
  Это все 
  Не пишите пустые else .  Это просто загромождает код, и совершенно очевидно, что вы имели в виду. 
Во многих случаях вы можете использовать оператор switch :
 switch ($_POST['direction') { case 'up': // code ... break; case 'down': // code ... break; default: // else throw new Exception('Invalid direction value'); } 
Это не то, что может дать определенный ответ. Вот мое занятие, было бы интересно посмотреть, какие существуют другие мнения.
Сценарий 1: проверка булевского состояния
Это самый простой случай:
 if (condition) {} else {} 
  Задание условия в else if бы было избыточным, и для читателя действительно очевидно, что делает код.  Нет аргумента для использования else if в этом случае. 
Сценарий 2. Тестирование подмножества бесконечных состояний
Здесь нас интересует тестирование условий A и B (и т. Д.), И мы можем или не можем быть заинтересованы в том, что произойдет, если ни одно из них не будет выполнено:
 if (conditionA) {} else if (conditionB) {} else {} // this might be missing 
  Важным моментом здесь является то, что не существует конечного числа взаимоисключающих состояний, например: conditionA может быть $num % 2 == 0 а conditionB может быть $num % 3 == 0 . 
Я думаю, что естественно и желательно использовать здесь разумное количество ветвей; если ветви становятся слишком много, это может свидетельствовать о том, что разумное использование дизайна OO приведет к большим улучшениям в ремонтопригодности.
Сценарий 3: Тестирование подмножества конечных состояний
Это средняя точка между первыми двумя случаями: число состояний конечное, но больше двух. Тестирование значений типа перечислимого типа является архетипическим примером:
 if ($var == CONSTANT_FOO) {} else if ($var == CONSTANT_BAR) {} // either this, else {} // or this might be missing 
  В таких случаях использование switch , вероятно, лучше, потому что оно немедленно сообщает читателю, что число состояний является конечным и дает сильный намек на то, где можно найти список всех возможных состояний (в этом примере константы, начинающиеся с CONSTANT_ ) ,  Мои личные критерии – это число состояний, на которые я тестирую: если это только один (нет, else if ), я использую if ;  в противном случае – switch .  В любом случае, я не буду писать ничего, else if в этом сценарии. 
  Добавление else в качестве пустого блока catch-errors 
  Это напрямую связано со сценарием № 2 выше.  Если возможные состояния не являются конечными и известны во время компиляции, вы не можете сказать, что «в любом другом случае» означает, что произошла ошибка.  Видя, как в сценарии №2, switch будет более естественным, я чувствую, что использование else этом случае имеет плохой запах кода. 
  Вместо этого используйте switch с ветвью по default .  Он будет более четко понимать ваше намерение: 
 switch($direction) { case 'up': break; case 'down': break; default: // put error handling here if you want } 
Это может быть немного более подробным, но читателю ясно, как ожидается, что код будет функционировать. На мой взгляд, пустой блок будет выглядеть неестественным и озадачивающим здесь.
  Я думаю, что если нечего делать дальше, тогда нет необходимости в том, чтобы блок существовал в коде.  Если блок else включен, это означает, что он имеет цель быть там, поэтому код еще не завершен, если он пуст. 
  Иногда я делаю это так.  Я не беспокоюсь, что "left" интерпретируется как "down" потому что я всегда проверяю свой ввод, в этом случае с preg_match('{^up|down$}', $direction) .  Несомненно, switch более подходит … но мне не нравится подробный синтаксис. 
 if ($direction == "up") { // code goes here... } else //if ($direction == "down") { // code goes here... } 
  Я стараюсь больше не писать.  Когда-либо.  По моему опыту, использование else приводит к менее читаемой логике, особенно если if / elses являются вложенными. 
  Для присвоения var true или false (или любому другому простому этому-либо-значению) я всегда использую: 
 $varx = false; if ($my_codition_here === true) { $varx = true; } 
Когда у меня есть больший фрагмент логики, который вы могли бы считать «принадлежащим» в if / else, я обязательно сконфигурирую свой код так, чтобы, если условие выполнено, функция завершается, как правило, путем возврата:
 if ($my_codition_here === true) { // A reasonable amount of logic goes here return $the_result_up_untill_here; } // All logic that would have been "else" goes here. return $the_result_up_untill_here; 
  Как упоминал фигаг;  используйте инструкцию switch если вы считаете elseif . 
И как уже сказал Ваш здравый смысл, нет лучшей практики, но есть хорошие практики, и я думаю, что это одно.