Pilfunktioner
Pilfunktioner (Arrow Functions)
Pilfunktioner introducerades i PHP 7.4 som en mer koncis syntax för anonyma funktioner.
Både anonyma funktioner och pilfunktioner implementeras med hjälp av klassen Closure.
Pilfunktioner har den grundläggande formen `fn (argument_list) => expr`.
Pilfunktioner stöder samma funktioner som anonyma funktioner, med undantaget att användning av variabler från det överordnade omfånget alltid är automatiskt.
När en variabel som används i uttrycket definieras i det överordnade omfånget kommer den automatiskt att fångas genom värde. I följande exempel beter sig funktionerna `$fn1` och `$fn2` på samma sätt.
Exempel #1 Pilfunktioner fångar variabler genom värde automatiskt
<?php $y = 1; $fn1 = fn($x) => $x + $y; // motsvarande att använda $y genom värde: $fn2 = function ($x) use ($y) { return $x + $y; }; var_export($fn1(3)); ?>
Ovanstående exempel kommer att ge:
4
Detta fungerar också om pilfunktionerna är nästlade:
Exempel #2 Pilfunktioner fångar variabler genom värde automatiskt, även när de är nästlade
<?php $z = 1; $fn = fn($x) => fn($y) => $x * $y + $z; // Skriver ut 51 var_export($fn(5)(10)); ?>
På samma sätt som anonyma funktioner tillåter pilfunktionssyntaxen godtyckliga funktionssignaturer, inklusive parameter- och returtyper, standardvärden, variadics, samt genom-referens passering och återlämning. Alla följande är giltiga exempel på pilfunktioner:
Exempel #3 Exempel på pilfunktioner
<?php fn(array $x) => $x; static fn(): int => $x; fn($x = 42) => $x; fn(&$x) => $x; fn&($x) => $x; fn($x, ...$rest) => $rest; ?>
Pilfunktioner använder bindning genom värde. Detta är ungefär ekvivalent med att utföra `use($x)` för varje variabel `$x` som används inuti pilfunktionen. En bindning genom värde innebär att det inte är möjligt att modifiera några värden från det yttre omfånget. Anonyma funktioner kan istället användas för bindning genom referens.
Exempel #4 Värden från det yttre omfånget kan inte modifieras av pilfunktioner
<?php $x = 1; $fn = fn() => $x++; // Har ingen effekt $fn(); var_export($x); // Skriver ut 1 ?>
Ändringslogg
Version | Beskrivning |
---|---|
7.4.0 | Pilfunktioner blev tillgängliga. |
Anmärkningar
Notera: Det är möjligt att använda func_num_args(), func_get_arg(), och func_get_args() inuti en pilfunktion.
Sidslut
Orginalhemsidan på Engelska :
PHP
Språkreferens
Språkreferens#Funktioner