PHP: else

Посмотрите на функцию ниже. Она определяет тип предложения по последнему символу: если предложение заканчивается вопросительным знаком, функция вернет Sentence is question, иначе — Sentence is normal:

<?php

function getTypeOfSentence(string $sentence): string
{
    $lastChar = $sentence[-1];

    if ($lastChar === '?') {
        $sentenceType = 'question';
    } else {
        $sentenceType = 'normal';
    }

    return "Sentence is {$sentenceType}";
}

print_r(getTypeOfSentence('Hodor') . "\n");  // => Sentence is normal
print_r(getTypeOfSentence('Hodor?') . "\n"); // => Sentence is question

Мы добавили else и новый блок в фигурных скобках. Он выполнится, если условие в if окажется ложным. Еще в блок else можно вкладывать другие условия if. Else переводится «иначе», «в ином случае».

┌───────────┐
      │ условие?  │
      └─────┬─────┘
 true │           │ false
      ↓           ↓
┌──────────┐ ┌──────────┐
│ тело if  │ │ тело else│
└──────────┘ └──────────┘

Пример вложенных блоков:

<?php

$number = 10;

if ($number > 10) {
    print_r('Number is greater than 10');
} else {
    if ($number === 10) {
        print_r('Number is exactly 10');
    } else {
        print_r('Number is less than 10');
    }
}

Оформить конструкцию if-else можно двумя способами. С помощью отрицания !== можно изменить порядок блоков:

<?php

function getTypeOfSentence(string $sentence): string
{
    $lastChar = $sentence[-1];

    if ($lastChar !== '?') {
        $sentenceType = 'normal';
    } else {
        $sentenceType = 'question';
    }

    return "Sentence is {$sentenceType}";
}

Чтобы конструкцию было легче оформлять, старайтесь выбирать проверку без отрицаний и подстраивайте содержимое блоков под нее.

На примере использования else видно, как важно следить за тем, к какому if относится каждый блок:

<?php

// Неправильно
function checkNumber(int $number): void
{
    if ($number > 0) {
        print_r("Число положительное\n");
    }

    if ($number > 10) {
        print_r("Число больше 10\n");
    } else {
        print_r("Число не положительное\n");
    }
}

checkNumber(3);
// => Число положительное
// => Число не положительное

В примере выше мы забыли вложить второй if внутрь первого, поэтому else теперь относится ко второму if. Программа сообщает, что число одновременно положительное и не положительное.

<?php

// Правильно
function checkNumber(int $number): void
{
    if ($number > 0) {
        print_r("Число положительное\n");

        if ($number > 10) {
            print_r("Число больше 10\n");
        }
    } else {
        print_r("Число не положительное\n");
    }
}

checkNumber(3);
// => Число положительное

Теперь второй if вложен в первый, а else на одном уровне с первым и противопоставляется ему.

Задание

Реализуйте функцию normalizeUrl(), которая выполняет нормализацию данных. Она принимает адрес сайта и возвращает его с https:// в начале.

Функция принимает адреса в виде АДРЕС или http://АДРЕС, но всегда возвращает адрес в виде https://АДРЕС. На вход функции также может поступить адрес в уже нормализованном виде https://АДРЕС, в этом случае ничего менять не надо.

Примеры вызова:

<?php

normalizeUrl('https://ya.ru'); // 'https://ya.ru'
normalizeUrl('google.com');    // 'https://google.com'
normalizeUrl('http://ai.fi');  // 'https://ai.fi'

Есть несколько способов решить задачу. Один из них — проверить с помощью функции str_starts_with(), начинается ли строка-аргумент со строки http://, а потом на основе этого добавлять или не добавлять к ней https://.

Также вам скорее всего потребуется отбросить ненужную часть в начале строки. Помните, мы рассматривали способ получения кусочка от строки с помощью функции substr()? Если нет, напоминаю:

<?php

// Берем 2 символа от начала
print_r(substr('python', 0, 2)); // => py

Так вот, с помощью substr() можно также отбросить определенное количество символов:

<?php

// Отбрасываем первые 2 символа
print_r(substr('python', 2)); // => thon

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются