====== PHP RFC: Fix list() behavior inconsistency ======
* Version: 1.0
* Date: 2014-09-11
* Author: Dmitry Stogov, dmitry@zend.com
* Status: Implemented (in PHP 7)
* First Published at: http://wiki.php.net/rfc/fix_list_behavior_inconsistency
===== Introduction =====
According to [[http://php.net/manual/en/function.list.php|PHP documentation]] list() construct doesn't work with strings.
However in some cases it works.
$ php -r 'list($a,$b) = "aa";var_dump($a,$b);'
NULL
NULL
$ php -r '$a[0]="ab"; list($a,$b) = $a[0]; var_dump($a,$b);'
string(1) "a"
string(1) "b"
This behavior caused by implementation feature and wasn't made on purpose.
===== Proposal =====
Make list() behave with strings in consistent way. There are two options:
==== Disable string handling in all cases ====
This will disable undocumented feature and it may break some existing PHP code.
==== Enable string handling in all cases ====
This will make the following code work.
list($a,$b) = "str";
Instead of assignment NULL into $a and $b, it'll assign 's' and 't' characters.
However, it also may break some existing PHP code.
===== Backward Incompatible Changes =====
Both options may affect existing PHP code.
===== Proposed PHP Version(s) =====
PHP7
===== Vote =====
This project requires a 2/3 majority, between first and second or third options.
Voting started on 2014-09-25 and ends 2014-10-02.
* don't fix
* disable string handling in all cases
* enable string handling in all cases
===== Implementation =====
Support for strings has been removed for all cases. Support for ''ArrayAccess'' has been added for all cases (previously it was not supported for temporary variables).
https://github.com/php/php-src/commit/7c7b9184b1fdf7add1715079f22241bc1185fcb0