Re: Proposal for a RFC

From: Date: Mon, 06 May 2019 14:37:24 +0000
Subject: Re: Proposal for a RFC
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-105598@lists.php.net to get a copy of this message
> On May 5, 2019, at 10:59 AM, Ben Ramsey <ben@benramsey.com> wrote: > > >> On May 4, 2019, at 09:58, Steven Wade <stevenwadejr@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 <X“ Ä… >> ¶Êób«ìÎÊ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. ¯\_(ツ)_/¯

« previous php.internals (#105598) next »