Re: [RFC] Reclassifying engine warnings

From: Date: Thu, 12 Sep 2019 14:13:21 +0000
Subject: Re: [RFC] Reclassifying engine warnings
References: 1 2 3 4 5 6 7 8 9 10  Groups: php.internals 
Request: Send a blank email to internals+get-106957@lists.php.net to get a copy of this message
On Thu, Sep 12, 2019 at 4:11 PM Rowan Tommins <rowan.collins@gmail.com> wrote: > On Thu, 12 Sep 2019 at 14:55, Claude Pache <claude.pache@gmail.com> wrote: > > > Le 12 sept. 2019 à 15:33, Marco Pivetta <ocramius@gmail.com> a écrit : > > > > $foo[$key1][$key2] = ($foo[$key1][$key2] ?? 0) + 1; > > > > Marco Pivetta > > > > > > That violates blatantly DRY (twice the exact same lengthy expression > > $foo[$key1][$key2]), so it is not a satisfactory solution. > > > > > Agreed; it's certainly neater than all the isset() checks, but it's > definitely a bit ugly. > > To clarify my point, the reason why people write this: > > $foo[$key1][$key2]++; > > Is not because they're lazy, it's because *it expresses their intent*. > > The ?key syntax was one suggestion for how to express the intent safely in > that particular scenario. Another way might be that the array is > initialised a different way; completely off the top of my head, something > like this: > > $foo = new Dictionary<string, Dictionary<string, int=0>>; > > That could express the intent of "this variable is going to be used as an > accumulator with these dimensions". > > The "if isset" lines, in my opinion, don't express any intent, and they > don't protect against any real errors; they're just noise to work around a > short-coming in the language. FTR this is basically what Python does via defaultdict: https://docs.python.org/3/library/collections.html#collections.defaultdict I think it is the "cleanest" solution to this problem overall. Though it does need a separate structure, rather than our favorite PHP array. Nikita

« previous php.internals (#106957) next »