====== RFC: foreach_variable supporting T_LIST ====== * Version: 1.0 * Date: 2011-07-06 * Author: Xinchen Hui * Status: Implemented * First Published at: http://wiki.php.net/rfc/foreachlist/ ===== Introduction ===== This feature introduces list() support in foreach constructs: This feature eliminates the use of a redundant variable ($user in the example above), reduces code verbosity in typical cases of iterating structured data, such as SQL result sets, and it doesn't introduce new keywords, but simply reuses a familiar PHP construct in a new context. It's a commonly requested feature, and there is evidence that people already expect list() should work in this scenario: #10203 [[https://bugs.php.net/bug.php?id=10203|allow foreach($array as list($a,$b)]] This RFC provides a behavior specification and implementation for this feature. ===== Implementation details of the RFC ===== In order to avoid the reduce/reduce conflict, new bison rules will be added to the existing "foreach_variable", to avoid this side effect: $foo) { } Without the new patch: PHP Parse error: syntax error, unexpected '&', expecting T_STRING or T_VARIABLE or '$' in /home/huixc/test.php on line 2 With the new patch: PHP Fatal error: Key element cannot be a reference in /home/huixc/test.php on line 2 Fatal error: Key element cannot be a reference in /home/huixc/test.php on line 2 ===== Possible additional features (vote separately): silent token ====== It is possible to add support of the silent token in the new context: $array = array(array(1,3,4), array(1, 2)); foreach ($array as @list($a, $b, $c)) { } 1 ===== Patches ===== * foreach list: https://github.com/laruence/php-src/tree/foreachlist_nosilenttoken * foreach list with supporting of silent token: https://github.com/laruence/php-src/tree/foreachlist ===== Vote ===== * Yes * No * Yes * No ===== Changelog ===== * 2011-07-06 Xinchen Hui: Initial RFC creation * 2011-07-06 Xinchen Hui: Updated patch * 2011-07-06 Xinchen Hui: Added tests phpt * 2011-07-07 Xinchen Hui: Added supporting for slience token(@) * 2011-07-07 Xinchen Hui: Updated sencode patch * 2011-07-08 Xinchen Hui: Added opcodes with silent token * 2011-07-24 Xinchen Hui: Updated patches that fixed a bug: znode->EA may be depend on an uninitialized value (thanks to Felipe) * 2012-07-18 Phidev: Rewrote the RFC * 2012-08-18 Xinchen Hui: Open voting * 2012-08-25 Xinchen Hui: Close voting