Re: Allows arrays to be type-hinted with interfaces mimicking Array behaviour
| From: | Rowan Collins | Date: | Tue, 19 Feb 2019 09:38:16 +0000 |
| Subject: | Re: Allows arrays to be type-hinted with interfaces mimicking Array behaviour | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-104470@lists.php.net to get a copy of this message | ||
On Tue, 19 Feb 2019 at 02:44, Larry Garfield <larry@garfieldtech.com> wrote:
> Yes, a lot of existing code uses arrays as anonymous structs. Such code
> is,
> IMO, "doing it wrong". That includes PHP default behavior in many cases.
> The
> super-globals are one of the exceptions, as since by definition you don't
> know
> what the keys could be in advance you need some sort of generic accessor.
>
> superglobals anyway on the grounds that globals are evil (fact check:
> true).
> There is often an object wrapping around the session that has get() and
> set()
> object be kind-of-array-ish-for-some-part-of-array-ish-ness is a
> long-standing
> problem, no question. iterable was a good addition. I think there was
> discussion of a countable type hint at one point, but I don't think it
> made it
> That leaves ArrayAccessible (aka, you can put [] after it and something
> useful
> happens), which is what you describe. I would not be against adding such
> a
> instead of an object is Just Plain Wrong(tm). Even a bare public property
> class is superior in every possible way, before we even get into questions
> of
> useful accessor methods.
>
> be. (Eg, parsing JSON, GET or POST parameters, etc.)
> 2) You're being sloppy and not thinking through your API.
> struct into an object that has appropriate accessors that can then handle
> error cases, missing values, etc. Not doing so results in things like,
> say,
> particular anonymous-struct was missing a certain key, which I didn't know
> was
> possible, but it broke the whole application. (Seriously, that was my
> entire
> struct, even if you're using __get() or ArrayAccerss to do it. (SimpleXML
> is
> an example of that approach, for better or worse.)
> where you have to care, but those are edge-casey.
>
> ArrayAccessible is a code smell, and the solution is to properly structure
> your data and type hint on a defined class instead. Including an
> ArrayAccessible pseudo-type would be just a matter of completeness, not
> something I would advise anyone actually use.
Hi Larry,
The above post seems to have been mangled somewhere and lost some of its
text. It's mostly readable anyway (and I think I agree with what's there)
but if you have a copy of the original anywhere, you might want to re-post
it.
Regards,
--
Rowan Collins
[IMSoP]