PHP: Объект как массив
В 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
.
Для полного доступа к испытанию нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.