ID:               26396
 Updated by:       [EMAIL PROTECTED]
 Reported By:      php dot net dot 1 at odi dot ch
 Status:           Wont fix
 Bug Type:         Arrays related
 Operating System: *
 PHP Version:      4.3.3
 New Comment:

PHP variables are implemented as refcounted unions in c. A reference in
PHP means a flag in php which is the difference of making copies or
working on the original memory. PHP Objects are handles in PHP 5 so
copying it doesn't make a difference - only the handle is copied.


Previous Comments:
------------------------------------------------------------------------

[2003-11-25 18:48:12] php dot net dot 1 at odi dot ch

Sad to see that PHP's language constructs are so fundamentally flawed.

------------------------------------------------------------------------

[2003-11-25 18:11:31] jpatrin at pnicorp dot com

Ok, I'll accept that response, but why does foreach not make a copy of
the referenced array? I see no place in the foreach docs that say that
it doesn't make a copy when the variable is a reference.

Sidenote: I thought that all PHP vars were refernces and that usinf =&
made it a refernce to the same object instead of a refernce to a copy
of the object. If this is true, the copy should still be made just
fine. foreach is ALWAYS supposed to make a copy of the array and
foreach over that.

------------------------------------------------------------------------

[2003-11-25 17:21:46] [EMAIL PROTECTED]

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

I was right then. Global creates a reference and referenced arrays
cannot be nested. When an array is passed to foreach and it is not a
reference then a copy of the array is created. That's where the
difference comes from.

------------------------------------------------------------------------

[2003-11-25 16:27:47] jpatrin at pnicorp dot com

Here's a bit more. If you use 

$usr_langs =& $GLOBALS['usr_langs'];

instead of

global $usr_langs;

the same bug presents it self.

Also, if you put

global $usr_langs;

above the echo "Test2..." You get only "de" in the output. It seems
like global is munging the scope of foreach copies.

------------------------------------------------------------------------

[2003-11-25 16:08:19] [EMAIL PROTECTED]

Interesting, anybody?

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/26396

-- 
Edit this bug report at http://bugs.php.net/?id=26396&edit=1

Reply via email to