PHP: Объект как массив

Обновлено: 14 сент., 16:50
205
Студентов
84%
Завершения

В 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.

Для полного доступа к испытанию нужен базовый план

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

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов