Re: Re[2]: nested, referenced foreach & implicit current array pointer issues

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2007/1/30, speedy <speedy.spam@xxxxxxxxx>:

Hello Martin,

> Tuesday, January 30, 2007, 8:45:50 PM, you wrote:
>
> function f()
> {
>    global $arr;
>
>    foreach($arr as $k=>$v) {
>        $v->do_something();
>    }
> }
>
>  I don't see your point anywhere... foreach iterates over a copy of
>  the array so where is the potential side-effect? Even so there will
>  be references if the items of the original array are references, or
>  if they are objects in PHP5, but that's expected behaviour. That's
>  the way many OOP languages have been implemented (eg: Java) without
>  coders having the problems you mention. Just give me one good
>  reason to even consider your proposal.


Humm, you seem to have misunderstood (& that could be one reason in
itself). In my example foreach() iterates over the original $arr array
(contrary to what you say) - and so may deeply nested fns in the called
do_something() method, making global + foreach construct
unuseable/"unstable" in non-trivial cases.


Damn, I hate localized documentation. The spanish manual isn't updated to
what foreach does in the latest PHP5, and I didn't bother to check the
english version. Foreach uses a copy only if the array is not a reference,
and that's why you have that problem. There is nothing wrong with the global
keyword, just use $GLOBAL['arr'] instead to avoid the reference, or create a
copy by assignment.

Anyway, I couldn't find this change of behaviour in the foreach in the
changelog, but it seems it have been introduced around may 2005. Maybe is
too late to complain, but, now that I know, I think this behaviour doesn't
seem right.

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux