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

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

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

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

obj.key = 'value4'; // 'value3'
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.

Успешных завершений: 84%

Последние код-ревью

Автор Дата обновления Версий
user-78423b6647ebbe4b 16 окт., 11:57 1
datsenko_md 23 сент., 20:08 1
32b 07 сент., 17:30 1
tur-4000 24 авг., 20:04 1
rhanmar 24 авг., 18:34 3