Зарегистрируйтесь, чтобы продолжить обучение

Условные конструкции if и if-else Основы PHP

Условная конструкция if

В этом уроке мы изучим три важных конструкции языка 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.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»