Req #51876 [Opn->Bgs]: Assigning to list(); list() as an lvalue
Edit report at http://bugs.php.net/bug.php?id=51876&edit=1
ID: 51876
Updated by: jani@php.net
Reported by: a at b dot c dot de
Summary: Assigning to list(); list() as an lvalue
-Status: Open
+Status: Bogus
Type: Feature/Change Request
Package: Scripting Engine problem
PHP Version: Irrelevant
Block user comment: N
Private report: N
New Comment:
Please do not submit the same bug more than once. An existing
bug report already describes this very problem. Even if you feel
that your issue is somewhat different, the resolution is likely
to be the same.
Thank you for your interest in PHP.
Previous Comments:
------------------------------------------------------------------------
[2010-05-21 00:54:22] a at b dot c dot de
Description:
------------
When an array is "assigned" to a list($of,$variables), the elements of
the array are extracted and assigned to the listed variables; elements
can be skipped by duplicating commas in the list().
The variables in the list() construct may themselves be list()
constructs, allowing the extraction of values from nested arrays (the
nesting of the list()s reflects the nesting of the arrays).
On the PHP6 TODO list is the job of allowing list() to appear as the
iterated value in a foreach statement (foreach($array as
$key=>list($v1,$v2)){...}).
My suggestion is that another place where list() might play a role is in
function declarations; when a function parameter is in a list(), the
argument it gets when it's called has its elements extracted and
assigned to the variables in the list (see the test script for this to
be clearer).
If the argument is not an array, the behaviour would be the same in
existing situations where list() is not given an array. References would
behave as usual also.
Test script:
---------------
<?php
function foo($a, list($b, &$c), $d)
{
echo "$a $c $b $d";
$c = 'Zero';
}
$coconuts = array('One', 'Two', 'Three', 'Four');
foo(17, $coconuts, "radish");
echo "\n", $coconuts[1];
?>
Expected result:
----------------
17 Two One radish
Zero
Actual result:
--------------
At present it's a parse error, of course.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=51876&edit=1
Thread (2 messages)