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.

Reply via email to