Ответ
Чтобы объект в PHP мог использоваться как массив (с синтаксисом $obj['key']), он должен реализовывать интерфейс ArrayAccess. Этот интерфейс требует определения четырех методов:
offsetExists($offset): bool— проверяет, существует ли элемент по ключу.offsetGet($offset): mixed— возвращает значение по ключу.offsetSet($offset, $value): void— устанавливает значение по ключу.offsetUnset($offset): void— удаляет элемент по ключу.
Практический пример — коллекция:
class ItemCollection implements ArrayAccess
{
private array $items = [];
public function offsetExists($offset): bool
{
return array_key_exists($offset, $this->items);
}
public function offsetGet($offset): mixed
{
return $this->items[$offset] ?? null;
}
public function offsetSet($offset, $value): void
{
if (is_null($offset)) {
$this->items[] = $value; // Добавление в конец, как $array[]
} else {
$this->items[$offset] = $value;
}
}
public function offsetUnset($offset): void
{
unset($this->items[$offset]);
}
}
// Использование
$cart = new ItemCollection();
$cart['apple'] = 5; // Вызовет offsetSet
$count = $cart['apple']; // Вызовет offsetGet, вернет 5
isset($cart['pear']); // Вызовет offsetExists, вернет false
unset($cart['apple']); // Вызовет offsetUnset
Это мощный инструмент для создания объектов, которые ведут себя как нативные структуры данных.