On Tue, 4 Feb 2020 at 10:37, Marco Pivetta <ocram...@gmail.com> wrote:
> Correct: an explicit `$foo->toArray()` call suffices. > > For other readers, more about `$foo->toArray()` vs `(array) $foo` is > described at > > https://github.com/ShittySoft/symfony-live-berlin-2018-doctrine-tutorial/pull/3#issuecomment-460441229 > The pros and cons of overloading casts are roughly the same as those of operator overloading in general: on one hand: + It is more succinct than calling a method + It aids creation of richer Domain Specific Languages on the other: - It is less explicit than choosing a purpose-specific method name - It is less flexible than having multiple related methods, or a method with parameters - It is harder to predict behaviour at a glance > Or we can deprecate __toString() method at all and detect cast events > instead. Would it make more sense? Something like this __casted(). If there was a good case made for how it should work, I'd be more supportive of a general feature to overload casting, rather than making (array) a special case. One of many challenges would be working out when the cast should happen implicitly. Should "iterable $foo" trigger an array cast if the object isn't iterable? Should foreach()? Should strict_types change that behaviour as it does for __toString(), even though it currently only applies to scalar types? Regards, -- Rowan Tommins [IMSoP]