rfc:arrow_functions_v2
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:arrow_functions_v2 [2019/03/14 08:58] – Cover more syntax nikic | rfc:arrow_functions_v2 [2020/08/01 23:53] (current) – RFC was implemented carusogabriel | ||
---|---|---|---|
Line 6: | Line 6: | ||
* Target version: PHP 7.4 | * Target version: PHP 7.4 | ||
* Implementation: | * Implementation: | ||
- | * Status: | + | * Status: |
===== Introduction ===== | ===== Introduction ===== | ||
Anonymous functions in PHP can be quite verbose, even when they only perform a simple operation. | Anonymous functions in PHP can be quite verbose, even when they only perform a simple operation. | ||
- | Partly this is due to a large amount of syntactic boilerplate, | + | Partly this is due to a large amount of syntactic boilerplate, |
import used variables. This makes code using simple closures hard to read and understand. This RFC | import used variables. This makes code using simple closures hard to read and understand. This RFC | ||
proposes a more concise syntax for this pattern. | proposes a more concise syntax for this pattern. | ||
Line 90: | Line 90: | ||
</ | </ | ||
- | ==== Static | + | ==== $this binding and static |
- | For the sake of completeness, static arrow functions are supported using the syntax | + | Just like normal closures, the '' |
- | < | + | |
- | bind the '' | + | |
- | Static closures are mainly | + | < |
- | which may result in delayed GC. | + | class Test { |
+ | public function method() { | ||
+ | $fn = fn() => var_dump($this); | ||
+ | $fn(); // object(Test)# | ||
+ | |||
+ | $fn = static fn() => var_dump($this); | ||
+ | $fn(); // Error: Using $this when not in object context | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Static closures are rarely used: They' | ||
+ | |||
+ | It has been suggested that we could use this opportunity to change the '' | ||
==== By-value variable binding ==== | ==== By-value variable binding ==== | ||
Line 248: | Line 259: | ||
===== Vote ===== | ===== Vote ===== | ||
- | Simple yes/no vote. | + | Voting started 2019-04-17 and ends 2019-05-01. A 2/3 majority is required. |
+ | |||
+ | <doodle title=" | ||
+ | * Yes | ||
+ | * No | ||
+ | </ | ||
===== Discussion ===== | ===== Discussion ===== | ||
Line 564: | Line 580: | ||
<PHP> | <PHP> | ||
$x = 1; | $x = 1; | ||
- | $fn = () => $x++; | + | $fn = fn() => $x++; |
$fn(); | $fn(); | ||
var_dump($x); | var_dump($x); | ||
Line 734: | Line 750: | ||
===== Changelog ===== | ===== Changelog ===== | ||
+ | * 2019-03-14: Clarify $this binding and explain why we're sticking with always-bind behavior. | ||
* 2019-03-14: Mention '' | * 2019-03-14: Mention '' |
rfc/arrow_functions_v2.1552553904.txt.gz · Last modified: 2019/03/14 08:58 by nikic