Edit report at http://bugs.php.net/bug.php?id=51112&edit=1
ID: 51112
User updated by: post at oliver-schieche dot de
Reported by: post at oliver-schieche dot de
Summary: list() misbehaviour
Status: To be documented
Type: Bug
Package: Scripting Engine problem
Operating System: Debian (etch)
PHP Version: 5.2.12
New Comment:
Hate to be nagging again, but there's still a problem: it works "as it's
supposed to" (read: "as it's not documented") in PHP4, but doesn't in
PHP5 with the exception, that the following produces expected results:
$a = array('Foo','Bar');
list($a,$b) = $a;
$a == 'Foo' ==> TRUE
$b == 'Bar' ==> TRUE
"both variables are needed during the "list" operation." is a somewhat
confusing statement regarding the issue(s) above.
Previous Comments:
------------------------------------------------------------------------
[2010-03-21 19:52:00] [email protected]
The order in which the variables are picked up in this case is
"undefined behavior" - both variables are needed during the "list"
operation.
------------------------------------------------------------------------
[2010-03-18 18:38:12] [email protected]
Can this either be classfied as a scripting engine bug. If it indeed is
a documentation issue then re-classify this as a "To be Documented"
documentation issue for the developer that picks this one up.
------------------------------------------------------------------------
[2010-02-22 12:58:56] post at oliver-schieche dot de
Why document an obvious bug instead of fixing it? How would you
document/explain this?
If this works:
function ret($array) {return $array;}
$b = array('foo','bar');
list($a,$b) = ret($b);
But this doesn't:
function &ret(&$array) {return $array;}
$b = array('foo','bar');
list($a,$b) = ret($b);
Then there's a referencing error hidden somewhere...
------------------------------------------------------------------------
[2010-02-22 12:42:52] [email protected]
That's pretty much the same thing you can see with foreach, the array
should not be altered while looping (the array itself, the data of a
given element can be altered). No bug here, but should be documented.
------------------------------------------------------------------------
[2010-02-22 12:38:52] post at oliver-schieche dot de
Description:
------------
When assigning an array to a list() of variables and using the input
array as a member of that list(), unexpected results are returned.
Reproduce code:
---------------
$b = array('foo','bar');
list($a,$b) = $b;
$c = array('foo','bar');
list($c,$d) = $c;
Expected result:
----------------
$a == $c == 'foo'
$b == $d == 'bar'
Actual result:
--------------
$a == 'b'
$b == 'bar'
$c == 'foo'
$d == 'bar'
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=51112&edit=1