On Tue, 19 Feb 2019 at 02:44, Larry Garfield <la...@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]