> On May 5, 2019, at 10:59 AM, Ben Ramsey <b...@benramsey.com> wrote: > > >> On May 4, 2019, at 09:58, Steven Wade <stevenwad...@gmail.com> wrote: >> >> Hi Internals team! >> >> I have an idea for a feature that I'd love to see in the language one day >> and wanted to run the idea by you all. >> >> The idea is to add a new magic method "__toArray()" that would allow a >> developer to specifiy how a class is cast to an array. The idea is the same >> mentality of __toString(), but, for arrays. >> >> I would personally love this feature and those I've run it by were also >> excited by the idea. So I'm soliciting feedback in hopes that things go well >> and I can officially write the RFC. As for implementation, Sara Golemon is >> awesome and while chatting a few months back, knocked out a proof-of-concept >> implementation >> <https://github.com/sgolemon/php-src/tree/experimental.toarray>. There's >> still work to be done if this proposal gets to the RFC phase, but again, >> just gauging interest here. >> >> I appreciate any feedback you all can provide. >> >> Thanks, >> >> - Steven Wade > > Using existing language functionality, would it satisfy the similar needs if > you implement IteratorAggregate and return an ArrayIterator from the > getIterator() method? Obviously, the (array) cast wouldn’t use this, but you > could do $object->getIterator()->getArrayCopy(). > > I’m not against the proposal. I’m mainly asking if there are other ways in > the language today to accomplish similar things. I would prefer to see > interfaces used over more magic methods (something like ArraySerializable).
PHP already has the magic built in. The proposal is really just a way to control the magic. We already have "(string) $foo" and "__toString()", so the idea of implementing a "__toArray()" method is bringing a feature more inline with what's already there. I think it reads easier and cleaner "(array) $foo", and a simpler as a developer to implement than a mix of chained methods and interfaces. That being said, adding an interface like `ArraySerializable` might be nice too. I'm seeing technical arguments against adding magic casts, but (just spit-balling here), what if a class implemented a new `ArraySerializable` interace with whatever method it demands, and if that is attempted to be cast to an array either manually by calling "(array) $foo" or PHP attempting to, then the array serialize method is called. ¯\_(ツ)_/¯ -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php