PHP SPL - есть ли интерфейс или класс для управления тем, что происходит при приведении к массиву? - PullRequest
2 голосов
/ 14 февраля 2011

Таким образом, реализуя встроенные интерфейсы Iterator, ArrayAccess и Countable, мы можем контролировать, что происходит внутри объекта, когда он используется в циклах foreach или если к свойству обращаются так, как если бы индекс массива ($object['id']).

Например, если вы хотите, вы можете настроить его так, чтобы $object['version'] += 1 мог автоматически увеличивать поле version в базе данных.

Чего не хватает, так это приведения object к array. Есть ли какой-либо интерфейс или класс, который позволяет контролировать то, что происходит, когда вы делаете: (array) $object? Любой встроенный интерфейс или класс вообще, независимо от того, насколько он неясен? Например: если бы я хотел, чтобы (array) $object возвращал $this->propertyArray вместо преобразования обычного объекта в массив с выводом всех свойств открытого объекта?

Примечание: что-то вроде вызова $object->toArray() по имени метода не учитывается, так как идея состоит в том, чтобы максимально уменьшить внешние различия между массивом и объектом.

Ответы [ 2 ]

1 голос
/ 16 февраля 2011

нет, нет, потому что toArray () не является магической функцией, такой как __toString ();где приведение типов работает, например,

$foo = (string) $myObect;

, вы должны указать toArray () и внутри него вернуть ваш массив, возможно, в будущем может возникнуть __toArray ().

0 голосов
/ 16 февраля 2011

Вы можете добавить метод, подобный этому

public function toArray() {
    return get_object_vars( $this );
}

См. Здесь .Или проверьте SplFixedArray :: toArray .

...