PHP не имеет нативной реализации __toArray()
, как у __toString()
.
Если вы посмотрите документы PHP для преобразования в строку , вы увидите, что магический метод __toString()
явно упоминается как способ переопределения реализации по умолчанию.
Однако в документации, касающейся приведения типов к массивам , четко указывается, что происходит при преобразовании объекта в массив, без упоминания каких-либо магических методов (выделено мной)
Преобразование в массив
Для любого из типов integer, float, string, boolean и resource преобразование значения в массив приводит к массиву с единственным элементом с нулевым индексом и значением скаляра, который был преобразован. Другими словами, (массив) $ scalarValue в точности совпадает с массивом ($ scalarValue).
Если объект преобразуется в массив, результатом является массив, элементы которого являются свойствами объекта .....
....
Решение
Простым решением является реализация метода ->toArray()
в вашем классе - то, что делают многие популярные реализации коллекций (включая Laravel Collection
)
Другое решение, которое может сработать, - это заставить ваш класс расширить класс ArrayObject
, который позволяет объектам работать как массивы.