📚
#20 18.09.2025 PHP Basics

Расскажите всё, что знаете об использовании в коде символов [ ] (квадратные скобки).

Квадратные скобки [] в PHP — основной синтаксис для работы с массивами: объявление ($arr = [];), доступ к элементу ($arr['key']), добавление ($arr[] = value). С PHP 7.1 используются для деструктуризации массивов ([$a, $b] = $arr). С PHP 5.6 — для доступа к элементу, возвращаемому функцией (getArray()[0]). Устаревший доступ через {} ($arr{'key'}) удален в PHP 8+.

Подробнее
⚠️
Внимание! Этот текст был сгенерирован AI-ассистентом. Информация может содержать неточности и требует проверки.

Полный ответ:

1. Основное назначение: Работа с массивами

Это самая частая и историческая роль квадратных скобок.

  • Объявление массива (краткий синтаксис): Начиная с PHP 5.4, [] является современным и предпочтительным способом объявления массивов вместо array().
    // До PHP 5.4
    $oldArray = array(1, 2, 3);
    // PHP 5.4+
    $newArray = [1, 2, 3]; // Современный синтаксис
    $assocArray = ['key' => 'value', 'another_key' => 123];
    
  • Доступ к элементам массива: Это основной и единственный современный способ получить значение по ключу.
    $array = ['name' => 'John', 'age' => 30];
    echo $array['name']; // John
    $indexedArray = ['a', 'b', 'c'];
    echo $indexedArray[1]; // b
    

    Важно: В старом коде можно встретить доступ к элементу через {} (например, $array{'key'}), но этот синтаксис устарел начиная с PHP 7.4 и удален в PHP 8.0. Всегда используйте [].

  • Добавление/изменение элементов:
    $array = [];
    $array[] = 'first';  // Добавит элемент в конец с числовым индексом 0
    $array['email'] = 'john@example.com'; // Добавит элемент с ключом 'email'
    $array[0] = 'new value'; // Изменит элемент с индексом 0
    

2. Оператор доступа к элементам массива и объекта (с PHP 5.4)

С PHP 5.4 появилась возможность сразу обращаться к элементу массива или свойству объекта, возвращаемого функцией (Function Array Dereferencing).

function getCollection() {
    return ['a', 'b', 'c'];
}
// Получить второй элемент массива, возвращаемого функцией
echo getCollection()[1]; // 'b'

function getUser() {
    return (object)['name' => 'Alice', 'age' => 25];
}
// Получить свойство объекта, возвращаемого функцией
echo getUser()->name; // Alice

3. Списки аргументов в функциях (с PHP 5.6)

В PHP 5.6 синтаксис [] был заимствован для обозначения списка аргументов в объявлении функции. Это замена старому синтаксису func_get_args().

// Старый способ (до PHP 5.6)
function oldWay() {
    $args = func_get_args();
    // ... обработка $args
}

// Новый способ (PHP 5.6+)
function newWay(...$args) { // ...$args - "spread" оператор
    // $args - это массив всех переданных аргументов
    // ... обработка $args
}
// Хотя здесь видны `...`, именно они формируют массив `$args`, доступный через `[]`.

4. Деструктуризация массивов (Array Destructuring) (с PHP 7.1)

Позволяет извлечь значения из массива и присвоить их переменным в одной операции.

$data = ['John', 'Doe', 'john@example.com'];

// Старый способ
$firstName = $data[0];
$lastName = $data[1];
$email = $data[2];

// Новый способ (деструктуризация)
[$firstName, $lastName, $email] = $data;

// Можно пропускать элементы
[, , $email] = $data; // Только email

// С ассоциативными массивами (ключи должны существовать)
$userData = ['name' => 'John', 'age' => 30];
['name' => $name, 'age' => $age] = $userData;

5. Объявление опциональных параметров в конструкциях (в квадратных скобках)

В документации и некоторых конфигурационных массивах (например, в Symfony) квадратные скобки часто обозначают необязательные параметры.

// Условное описание синтаксиса функции, а не реальный код
functionName(requiredParam, [optionalParam = defaultValue]);
// Это означает, что `optionalParam` можно не передавать.

Итог:

Квадратные скобки [] в PHP — это в первую очередь инструмент для работы с массивами:

  1. Объявление массива ($arr = [];).
  2. Доступ к элементам по ключу ($arr['key']).
  3. Деструктуризация для удобного извлечения значений ([$a, $b] = $arr;).

Дополнительные роли:

  • Доступ к результату функции (getArray()[0]).
  • Часть синтаксиса для списков аргументов (function (...$args)).

Важно: Использование {} для доступа к элементам массива (напр., $array{0}) является устаревшим и должно быть заменено на [].