rfc:list_default_value
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:list_default_value [2015/11/09 12:43] – reeze | rfc:list_default_value [2017/09/22 13:28] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== PHP RFC: Default Value in List Syntax ====== | + | ====== PHP RFC: Default Value in List Assignment |
* Version: 0.1 | * Version: 0.1 | ||
* Date: 2015-11-08 | * Date: 2015-11-08 | ||
* Author: Reeze Xia, reeze@php.net | * Author: Reeze Xia, reeze@php.net | ||
- | * Status: | + | * Status: |
* First Published at: http:// | * First Published at: http:// | ||
===== Introduction ===== | ===== Introduction ===== | ||
- | We could destruct variables from an array with [[http:// | + | We could destruct variables from an array with [[http:// |
- | For the similar | + | For the similar |
Some clever users figured out some workaround like this [[http:// | Some clever users figured out some workaround like this [[http:// | ||
Line 15: | Line 15: | ||
===== Proposal ===== | ===== Proposal ===== | ||
- | Support new syntax to set default | + | Support new syntax to set default |
<code php> | <code php> | ||
+ | // basic syntax | ||
list($a, $b=' | list($a, $b=' | ||
list($a, $b=' | list($a, $b=' | ||
+ | |||
+ | // comparation | ||
+ | list($a, list($b=1, $c=2)) = $arr; | ||
+ | // or we need to check it ourself | ||
+ | if (!isset($arr[1][0])) { | ||
+ | $arr[1][0] = 1; | ||
+ | } | ||
+ | if (!isset($arr[1][1])) { | ||
+ | $arr[1][0] = 2; | ||
+ | } | ||
+ | |||
+ | list($a, list($b, $c)) = $arr; | ||
+ | |||
+ | |||
+ | // other examples | ||
+ | function say_hello() | ||
+ | { | ||
+ | return " | ||
+ | } | ||
+ | $name = ' | ||
+ | list($a=say_hello(), | ||
list($a, list($b=1, $c=2)) = [1]; // a = 1, b = 1, c = 2 | list($a, list($b=1, $c=2)) = [1]; // a = 1, b = 1, c = 2 | ||
+ | |||
</ | </ | ||
- | The previous one assigment | + | The assignment |
<code php> | <code php> | ||
+ | |||
+ | list($a, $b=' | ||
+ | |||
+ | // equals | ||
+ | |||
$a = $arr[0]; | $a = $arr[0]; | ||
$b = isset($arr[1]) ? $arr[1] : ' | $b = isset($arr[1]) ? $arr[1] : ' | ||
Line 34: | Line 62: | ||
- | All the features and examples of the proposal. | + | The syntax is: |
- | To [[http:// | + | <code flex> |
- | for inclusion in one of the world's most popular programming languages. | + | assignment_list_element: |
+ | variable | ||
+ | + | variable ' | ||
+ | | T_LIST | ||
+ | | /* empty */ | ||
+ | </ | ||
- | Remember that the RFC contents should be easily reusable in the PHP Documentation. | + | The syntax is same as function' |
- | ===== Backward Incompatible Changes ===== | ||
- | What breaks, and what is the justification for it? | ||
- | ===== Proposed PHP Version(s) ===== | + | We could also set default value in foreach list context: |
- | List the proposed PHP versions that the feature will be included | + | |
- | ===== RFC Impact ===== | + | <code php> |
- | ==== To SAPIs ==== | + | foreach($arr as list($k, list($v1=' |
- | Describe the impact to CLI, Development web server, embedded PHP etc. | + | // do something |
+ | } | ||
+ | </ | ||
- | ==== To Existing Extensions ==== | + | More case could be found from PR's tests: |
- | Will existing extensions | + | |
- | ==== To Opcache ==== | + | This feature could also be found in [[https:// |
- | It is necessary to develop RFC's with opcache | + | |
- | Please explain how you have verified your RFC's compatibility with opcache. | + | ===== Backward Incompatible Changes ===== |
- | ==== New Constants ==== | + | No BC break. |
- | Describe any new constants so they can be accurately and comprehensively explained in the PHP documentation. | + | |
- | ==== php.ini Defaults | + | ===== Proposed PHP Version(s) ===== |
- | If there are any php.ini settings then list: | + | PHP 7.1 |
- | * hardcoded default values | + | |
- | * php.ini-development values | + | |
- | * php.ini-production values | + | |
- | ===== Open Issues | + | ===== RFC Impact |
- | Make sure there are no open issues when the vote starts! | + | |
- | ===== Unaffected PHP Functionality | + | ==== To Opcache |
- | List existing areas/ | + | |
- | This helps avoid any ambiguity, shows that you have thought deeply about the RFC's impact, and helps reduces mail list noise. | + | I am working on opcache compatibility. |
+ | |||
+ | ===== Open Issues ===== | ||
+ | None for now | ||
===== Future Scope ===== | ===== Future Scope ===== | ||
- | This sections details areas where the feature might be improved in future, but that are not currently proposed in this RFC. | ||
===== Proposed Voting Choices ===== | ===== Proposed Voting Choices ===== | ||
- | Include these so readers know where you are heading and can discuss the proposed voting options. | ||
- | State whether this project requires a 2/3 or 50%+1 majority (see [[voting]]) | + | * Whether accept the RFC for PHP 7.1 |
+ | |||
+ | This project requires a 2/3 majority (see [[voting]]) | ||
===== Patches and Tests ===== | ===== Patches and Tests ===== | ||
- | Links to any external patches and tests go here. | ||
- | If there is no patch, make it clear who will create a patch, or whether a volunteer to help with implementation is needed. | + | * Patch: [[https:// |
- | Make it clear if the patch is intended to be the final patch, or is just a prototype. | + | I am working on opcache compatibility |
===== Implementation ===== | ===== Implementation ===== | ||
Line 98: | Line 124: | ||
===== References ===== | ===== References ===== | ||
- | Links to external references, discussions or RFCs | + | |
+ | * Javascript destructing: | ||
+ | * Clojure destructing [[https:// | ||
===== Rejected Features ===== | ===== Rejected Features ===== | ||
- | Keep this updated with features that were discussed on the mail lists. | + | |
+ | ===== Changelog ===== | ||
+ | |||
+ | * v0.1 - Initial version |
rfc/list_default_value.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1