146
Студентов
82%
Завершения
Обновлено: 16 марта, 13:24

В JavaScript, вместо ассоциативного массива, используется встроенный тип данных объект. Объекты поддерживают одновременно два способа обращения к ним: через точку (аналог -> в PHP) и через [], как в обычных массивах.

const obj = {
  key: 'value',
  key2: {
    key3: 'value3',
  },
};

obj.key; // 'value'
obj['key']; // 'value'

obj.key2['key3']; // 'value3'
obj.key2['key3'] = 'value2';
obj.key2.key3; // 'value2'

obj.key = 'value4';
obj.key; // 'value4'

В PHP то же самое можно эмулировать через объект, который реализует интерфейс ArrayAccess. Кроме этого интерфейса, нужно реализовать магические методы __get и __set, которые дают обращаться к свойствам даже без их явного описания.

<?php

$items = [
    'key' => 'value',
    'key2' => [
        'key3' => 'value3'
    ]
];
$obj = new Obj($items);
$obj->key; // 'value'
$obj->key2->key3; // 'value3'
$obj['key']; // 'value'
$obj['key2']['key3']; // 'value3'

obj['undefinedKey']; // null
obj->undefinedKey; // null

src\Obj.php

Напишите класс Obj, который предоставляет к массиву (и всем вложенным массивам) объектный доступ. Класс должен реализовывать два интерфейса: App\ObjInterface и ArrayAccess.

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

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

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