On Fri, Jun 2, 2017 at 1:36 PM, Rowan Collins <rowan.coll...@gmail.com> wrote:
> On 2 June 2017 18:21:34 BST, Levi Morrison <le...@php.net> wrote: > >On Fri, Jun 2, 2017 at 11:12 AM, Michael Morris <tendo...@gmail.com> > >wrote: > >> What about foreach by reference, which is honestly the only time I > >use > >> referencing anymore... > >> > >> foreach ($array as $key => &$value) { > >> $value = someOp($value); > >> } > >> > >> Is this also bad? > > > >I'm not going to say "bad" but I would not personally write it that > >way. If the memory cost is too high to duplicate then ... > > The times I've used foreach-by-reference have absolutely nothing to do > with memory cost. Mostly, they're situations where explicitly writing back > into the original array would be tediously long-winded, like this: > > $some_array[$some_outer_key][$loop_key]['foo'] = > some_func($loop_value['foo']); > $some_array[$some_outer_key][$loop_key]['bar'] = > some_other_func($loop_value['bar'], true); > > Granted, there are probably major refactorings that would be in some way > better, but changing $loop_value to a reference gives the much more > readable: > > $loop_value['foo'] = some_func($loop_value['foo']); > $loop_value['bar'] = some_other_func($loop_value['bar'], true); > > References are fiddly, but they do have their uses. Short of eliminating > mutability, per functional programming, I think they'll always have their > place, in some form. > > Regards, > > -- > Rowan Collins > [IMSoP] > Same here. I was just trying to keep my example simple. I agree that a generator, or even better array_map, would be a better way to deal with the simplistic example I gave.