Каковы различные способы написания условных операторов if, использующих PHP?

Каковы различные способы написания, если условные выражения используют PHP?

Я знаю, например, следующее

if($test == 1){ }else{ } 

а также

 if($test == 1) echo 'asdsa'; else echo 'sdaaa'; 

Существует альтернативный синтаксис структуры управления :

 if ($text == 1): echo 'asdsa'; else: echo 'asdsa'; endif; 

Другой способ – использовать тернарный оператор . Пример в документации PHP:

 <?php // Example usage for: Ternary Operator $action = (empty($_POST['action'])) ? 'default' : $_POST['action']; // The above is identical to this if/else statement if (empty($_POST['action'])) { $action = 'default'; } else { $action = $_POST['action']; } ?> 

Другие структуры управления также описаны в руководстве по PHP . Единственными условными утверждениями являются тернарный условный оператор, ifelse ), а elseif или else if . Однако они имеют альтернативный синтаксис .

 echo ($test == 1) ? 'asdsa' : 'sdaaa'; 

Помимо того, что уже было сказано, есть такие вещи, как

 $sql_link = mysql_connect('localhost', 'root') or die('no mysql'); 

Или как альтернативный синтаксис для структур управления

(присваивание «ИЛИ» – это трюк :), если mysql_connect () не evaulate к true, PHP попытается оценить второе выражение, так что это действительно взломать:

 if (mysql_connect('localhost', 'root')) { $sql_link = true; } else { die('no mysql'); } 

)

Стандартная инструкция if:

 if(expression) { // code } elseif(expression) { // code } else { // code } 

Без привязок для отдельных строк кода после каждого утверждения:

 if(expression) // single line of code elseif(expression) // single line of code else // single line of code 

Синтаксис альтернативного управления:

 if(expression): // code elseif(expression): // code else: // code endif; 

И, наконец, троичный оператор:

 (expression ? expression_if_true : expression_if_false); 

Который также может быть записан как:

 (expression) ? expression_if_true : expression_if_false; 

Или без скобок, если хотите.

Не забывайте, что «Условная сложность» – это запах кода. Полиморфизм – ваш друг.

Условная логика невинна в зачаточном состоянии, когда ее легко понять и содержать в нескольких строках кода. К сожалению, он редко стареет. Вы реализуете несколько новых функций, и вдруг ваша условная логика становится сложной и экспансивной. [Джошуа Керевский: Рефакторинг для шаблонов]

Одна из самых простых вещей, которую вы можете сделать, чтобы избежать вложенных блоков, чтобы научиться использовать Оговорки о безопасности . (Примечание: это не синтаксис PHP. Рассматривайте его как псевдокод. Приемы здесь важны.)

 double getPayAmount() { if (_isDead) return deadAmount(); if (_isSeparated) return separatedAmount(); if (_isRetired) return retiredAmount(); return normalPayAmount(); }; 

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

 double disabilityAmount() { if (isNotEligableForDisability()) return 0; // compute the disability amount 

Другие ценные методы рефакторинга , связанные с условными выражениями, включают Decompose Conditional , Replace Conditional with Visitor и Converse Converse .

Теперь, когда у вас есть новые молотки, не позволяйте всему выглядеть как гвоздь!

 if($test == 1){ }else{ } # can only be used if performing 1 line of code after statement if($test == 1) echo 'asdsa'; else echo 'sdaaa'; #you can have as many elseif as you like (but you may wish to check out switch see below: if($test == 1){ }elseif{ }else{ } 

Также взгляните на переключатель () http://php.net/manual/en/control-structures.switch.php

 switch($test) { case "1" : break; case "2" : break; default : break; } 

Прямо из руководства PHP :

 <?php if ($a == 5): echo "a equals 5"; echo "..."; elseif ($a == 6): echo "a equals 6"; echo "!!!"; else: echo "a is neither 5 nor 6"; endif; ?>