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

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

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

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

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

Деструктуризация

В программировании часто встречается понятие «синтаксический сахар». Им обозначают конкретные конструкции в языках программирования, которые упрощают часто используемые операции, делая их синтаксически проще.

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

<?php

$a = 5;
$b = 8;

$temp = $a;
$a = $b;
$b = $temp;

Довольно утомительное занятие. А вот как можно сделать короче:

<?php

$a = 5;
$b = 8;

[$b, $a] = [$a, $b];

Не так круто, как в других языках, где можно писать a, b = b, a, но уже что-то.

Другой интересный пример синтаксического сахара — destructuring (дестракчеринг или деструктуризация). Представьте, что у нас есть массив из двух элементов, которыми мы хотим оперировать в нашей программе. Самый простой вариант использования — постоянное обращение по индексу $arr[0] и $arr[1]. Такой код не очень хорошо читается, потому что надо понять, что это такое. Поэтому гораздо лучше сначала присвоить эти значения переменным с хорошими именами. Тогда код будет выглядеть так:

<?php

$firstName = $arr[0];
$lastName = $arr[1];

Как видно, код стал значительно понятнее без лишних слов. Деструктуризация позволяет извлекать элементы из составной структуры, используя особый синтаксис:

<?php

[$firstName, $lastName] = $user;

Получилось и короче и понятнее (особенно если привыкнуть к этому способу записи). Пример с обменом переменных тоже построен на деструктуризации. Обратите внимание, что слева от = фактически был создан массив [$b, $a].

Деструктуризация работает для любого количества элементов. Более того, из массива можно выборочно извлекать конкретные элементы: допустим, нам необходимо извлечь из массива значения второго, четвёртого и пятого элемента. Для этого в выражении слева от присваивания надо перечислить переменные с соблюдением порядка: указывая переменные только в нужных позициях и делая пропуски в тех позициях, где значения нам не нужны. Внимательно изучите этот пример:

<?php
[, $secondElement, , $fourthElement, $fifthElement] = [1, 2, 3, 4, 5, 6];

Мы извлекли из массива [1, 2, 3, 4, 5, 6] значения второго, четвёртого и пятого элементов, сохранив их, соответственно, в переменных $secondElement, $fourthElement и $fifthElement. При этом на месте первого (нулевой индекс) и третьего (второй индекс) элементов мы сделали пропуски, не указав никаких переменных, потому что значения этих элементов в данном случае нам были не нужны. Поэкспериментируйте с кодом ниже и вы поймёте, как это работает:

<?php

[, $secondElement, ,$fourthElement, $fifthElement] = [1, 2, 3, 4, 5, 6];

print_r($secondElement); // => 2
print_r($fourthElement); // => 4
print_r($fifthElement);  // => 5

https://repl.it/@hexlet/php-arrays-destructuring-positional

Разложение массива можно использовать не только как отдельную инструкцию в коде, но и, например, в циклах:

<?php

$points = [
    [4, 3],
    [0, -3]
];

foreach ($points as [$x, $y]) {
    print_r([$x, $y]);
}

// => Array
// => (
// =>     [0] => 4
// =>     [1] => 3
// => )
// => Array
// => (
// =>     [0] => 0
// =>     [1] => -3
// => )

https://repl.it/@hexlet/php-arrays-destructuring-foreach

Деструктуризацию для ассоциативных массивов будем отдельно разбирать в курсе PHP: Ассоциативные массивы.


Дополнительные материалы

  1. Официальная документация

<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 «Конфиденциальность» и «Условия использования».