Таким образом, реализуя встроенные интерфейсы Iterator
, ArrayAccess
и Countable
, мы можем контролировать, что происходит внутри объекта, когда он используется в циклах foreach
или если к свойству обращаются так, как если бы индекс массива ($object['id']
).
Например, если вы хотите, вы можете настроить его так, чтобы $object['version'] += 1
мог автоматически увеличивать поле version
в базе данных.
Чего не хватает, так это приведения object
к array
. Есть ли какой-либо интерфейс или класс, который позволяет контролировать то, что происходит, когда вы делаете: (array) $object
? Любой встроенный интерфейс или класс вообще, независимо от того, насколько он неясен? Например: если бы я хотел, чтобы (array) $object
возвращал $this->propertyArray
вместо преобразования обычного объекта в массив с выводом всех свойств открытого объекта?
Примечание: что-то вроде вызова $object->toArray()
по имени метода не учитывается, так как идея состоит в том, чтобы максимально уменьшить внешние различия между массивом и объектом.