Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос нашим менторам. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Проверка существования значения

При работе с массивами часто допускается ошибка, называемая «выход за границу массива». Она заключается в том, что из массива извлекается элемент по несуществующему индексу:

<?php

$animals = ['cats', 'dogs', 'birds'];
$animals[5]; // null

В разных языках программирования поведение в случае выхода за границу реализовано совершенно по-разному. Иногда возникает ошибка, иногда возвращается undefined, как в JavaScript, а иногда подобный выход возвращает случайные данные из соседнего блока памяти, как в Си, что может привести к катастрофе.

В PHP свой путь. С одной стороны такой вызов вернёт null, с другой — возникнет Notice с примерно таким сообщением: "PHP Notice: Undefined offset: 5". В общем случае, правильно всегда проверять доступность индекса и никогда не обращаться к массиву за его границами. Это безопасная стратегия, и вам будет проще адаптироваться к новым языкам, используя это универсальное решение.

Проверку наличия индекса в массиве можно сделать с помощью функции array_key_exists, которая первым параметром принимает индекс, а вторым массив для поиска.

<?php

$ages = [3, 2];

if (array_key_exists(3, $ages)) {
    print_r('yeah!');
} else {
    print_r('no');
}
// => no

Вместо array_key_exists можно использовать и часто используют функцию isset. Она имеет ровно одно отличие в поведении, которое нужно учитывать. Если ключ существует, но его значение равно null, то isset вернёт false, а array_key_existstrue.

<?php

$ages = [3, 2];

// isset принимает на вход массив, так как он используется, с подставленным ключом
if (isset($ages[3])) {
    print_r('yeah!');
} else {
    print_r('no');
}
// => no

Оператор объединения с null

С седьмой версии PHP в качестве синтаксического сахара к isset появился специальный оператор ??. Он позволяет записать проверку на существование более коротким способом:

<?php

$age = $ages[3] ?? 5; // 5 - значение по умолчанию
// Эквивалентно этой строчке
$age = isset($ages[3]) ? $ages[3] : 5;

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

<?php

$value = $matrix[3] ?? $matrix[4][8] ?? 'x';

<span class="translation_missing" title="translation missing: ru.web.courses.lessons.mentors.mentor_avatars">Mentor Avatars</span>

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

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

Для полного доступа к курсу нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, даст возможность обращаться за помощью к менторам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Зарегистрироваться

или войти в аккаунт

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

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг». Защита от спама reCAPTCHA «Конфиденциальность» и «Условия использования».

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

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

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

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг». Защита от спама reCAPTCHA «Конфиденциальность» и «Условия использования».