Re: Re[2]: [PHP] nested, referenced foreach & implicit current array pointer issues
| From: | Martin Alterisio | Date: | Wed, 31 Jan 2007 15:50:22 +0000 |
| Subject: | Re: Re[2]: [PHP] nested, referenced foreach & implicit current array pointer issues | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-248089@lists.php.net to get a copy of this message | ||
2007/1/30, speedy <speedy.spam@gmail.com>:
Hello Martin, Tuesday, January 30, 2007, 8:45:50 PM, you wrote: function f() { global $arr; foreach($arr as $k=>$v) {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.$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.