Нет, вы неправильно поняли утилиту ArrayAccess.Это не просто оболочка для массива.Да, в стандартном примере для его реализации используется закрытая переменная $array
, функциональность которой заключена в класс, но это не особенно полезно.Часто вы также можете просто использовать массив.
Один хороший пример ArrayAccess - это когда скрипт не знает, какие переменные доступны.
В качестве довольно глупого примера представьте объектэто работало с удаленным сервером.Ресурсы на этом сервере можно читать, обновлять и удалять с помощью API по всей сети.Программист решает, что он хочет обернуть эту функциональность синтаксисом, подобным массиву, поэтому $foo['bar'] = 'foobar'
устанавливает для ресурса bar
на этом сервере значение foobar
, а echo $foo['bar']
получает его.Сценарий не может определить, какие ключи или значения присутствуют, не испробовав все возможные значения.
Таким образом, ArrayAccess позволяет использовать синтаксис массива для установки, обновления, извлечения или удаления из объекта с синтаксисом, подобным массиву.: Не больше, не меньше.
Другой интерфейс, Countable
, позволяет использовать count()
.Вы можете использовать оба интерфейса в одном классе.В идеале, было бы больше таких интерфейсов, возможно, включая те, которые могут выполнять array_values
или array_keys
, но в настоящее время их не существует.