В этом уроке мы изучим три важных конструкции языка PHP — if, else и else if.
if
Задача предиката — получить ответ на вопрос, но обычно этого недостаточно и нужно выполнить определенное действие в зависимости от ответа.
Напишем функцию, которая определяет тип переданного предложения. Для начала она будет отличать обычные предложения от вопросительных:
<?php
function getTypeOfSentence($sentence)
{
    // Простой способ извлечь последний символ
    $lastChar = $sentence[-1];
    if ($lastChar === '?') {
        return 'question';
    }
    return 'normal';
}
getTypeOfSentence('Hodor');  // normal
getTypeOfSentence('Hodor?'); // question
if — это инструкция. В скобках ей передается выражение-предикат, а затем описывается блок кода в фигурных скобках. Этот блок кода будет выполнен, только если предикат — истина. Если предикат — ложь, то блок кода в фигурных скобках пропускается, и функция продолжает свое выполнение дальше.
В нашем случае следующая строчка кода — return 'normal';. Она заставит функцию вернуть строку и завершиться. Как видите, return может находиться где угодно в функции, в том числе — внутри блока кода с условием.
else
Попробуем изменить функцию из предыдущего примера так, чтобы она возвращала не просто тип предложения, а целую строку Sentence is normal или Sentence is question:
<?php
function getTypeOfSentence($sentence)
{
    $lastChar = $sentence[-1];
    if ($lastChar === '?') {
        $sentenceType = 'question';
    } else {
        $sentenceType = 'normal';
    }
    return "Sentence is {$sentenceType}";
}
getTypeOfSentence('Hodor');  // Sentence is normal
getTypeOfSentence('Hodor?'); // Sentence is question
Мы добавили else и новый блок с фигурными скобками. Этот блок выполнится, только если условие в if — ложь.
Существует два способа оформления конструкции if-else. С помощью отрицания !== можно изменить порядок блоков:
<?php
function getTypeOfSentence($sentence)
{
    $lastChar = $sentence[-1];
    if ($lastChar !== '?') {
        $sentenceType = 'normal';
    } else {
        $sentenceType = 'question';
    }
    return "Sentence is {$sentenceType}";
}
Какой способ предпочтительнее? Обычно людям проще мыслить прямолинейно, а не через отрицание. Старайтесь выбирать проверку без отрицаний и подстраивайте содержимое блоков под нее.
Конструкция else if
Функция getTypeOfSentence() различает только вопросительные и обычные предложения. Давайте попробуем добавить поддержку восклицательных предложений:
<?php
function getTypeOfSentence($sentence)
{
    $lastChar = $sentence[-1];
    if ($lastChar === '!') {
        $sentenceType = 'exclamation';
    } else {
        $sentenceType = 'normal';
    }
    if ($lastChar === '?') {
        $sentenceType = 'question';
    }
    return "Sentence is {$sentenceType}";
}
getTypeOfSentence('Who?'); // 'Sentence is question'
getTypeOfSentence('No');   // 'Sentence is normal'
getTypeOfSentence('No!');  // 'Sentence is exclamation'
Мы добавили еще одну проверку (exclamation переводится «восклицание»). Технически функция работает, но с точки зрения семантики есть проблемы:
- Проверка на наличие вопросительного знака происходит в любом случае, даже если уже был обнаружен восклицательный знак
 - Ветка 
elseописана именно для первого условия, но не для второго 
Правильнее будет воспользоваться еще одной возможностью условной конструкции:
<?php
function getTypeOfSentence($sentence)
{
  $lastChar = $sentence[-1];
  if ($lastChar === '?') {
      $sentenceType = 'question';
  } elseif ($lastChar === '!') {
      $sentenceType = 'exclamation';
  } else {
      $sentenceType = 'normal';
  }
  return "Sentence is {$sentenceType}";
}
Теперь все условия выстроены в единую конструкцию.
Конструкция elseif — это «если не выполнено предыдущее условие, но выполнено текущее». Получается такая схема:
- Если последний символ 
?, то'question' - Иначе, если последний символ 
!, то'exclamation' - Иначе 
'normal' 
Выполнится только один из блоков кода, относящихся ко всей конструкции if.