Re: Re: Proposal for a RFC
| From: | Steven Wade | Date: | Mon, 13 May 2019 18:55:07 +0000 |
| Subject: | Re: Re: Proposal for a RFC | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-105692@lists.php.net to get a copy of this message | ||
> I'm personally unconvinced of the value of this, and would probably propose
> it was blocked by coding standards in my team if it was added, because its
> meaning is so ambiguous.
That's perfectly reasonable. Do you also block use of casting to a string with (string) $foo as
well? I ask because this proposal is simply on par with the idea behind string casting for objects.
I don't expect that everyone would use custom array casting via __toArray(), but for those that
would like to have that control and ease of use, it'd be valuable for them.
> I actually see quite a lot of classes with normal methods called things
> like "toArray", and my comment is always "to *what* array?" Most objects do
> not have a single "natural"/"canonical" array representation
I think the same could be said about "__toString()". But with that, some classes can be
boiled down to a single representation, such as the Ramsey\Uuid <https://github.com/ramsey/uuid/> package. The same is
with arrays. You can have a single entity such as person to where its array representation can be
first name, last name, age, race, gender, email, etc..., or you can have a collection of items, to
where in that representation as an array, you have control over what information is returned and
what isn't.
> As a thought experiment, imagine a similar method which allowed you to
> overload (object)$foo. Although (array)$foo tells you slightly more than
> that, I'm not convinced it tells you enough that you're not just hiding
> meaning behind cute syntax.
I'm confused by example, as there's no real need to overload casting to an object as a
class is already an object. Whereas, a class is not already an array. It's not about "cute
syntax", it's honestly about providing a simple clutter free helper for developers to take
control over how their classes are transformed to array representations.
> JsonSerializable actually suffers from similar problems, and is IMO useful
> only because it's automatically recursive. I presume the proposed mechanism
> would not be, i.e. return [$foo] would not be interpreted as return
> [(array)$foo].
You bring up a good point. Could you for a moment pretend like you're behind this proposal and
expand upon this question? If PHP were to have a __toArray() method, would you see it as being
recursive? In your opinion, how should/would it react?
I know not everyone will want or use this feature, but for those who would, it'd be a great
addition IMO. So my goal of this initial thread was to see, "what if we had this feature, what
would we want it to do?", and go from there.
--
Steven Wade
stevenwadejr@gmail.com