Arrow Functions
Pijlfuncties
Pijlfuncties werden geïntroduceerd in PHP 7.4 als een meer beknopte syntaxis voor anonieme functies.
Zowel anonieme functies als pijlfuncties worden geïmplementeerd met behulp van de Closure-klasse.
Pijlfuncties hebben de basisvorm
fn (argument_list) => expr.
Pijlfuncties ondersteunen dezelfde functies als anonieme functies, behalve dat het gebruik van variabelen uit de bovenliggende scope altijd automatisch is.
Wanneer een variabele die in de expressie wordt gebruikt, is gedefinieerd in de bovenliggende scope,
zal deze impliciet bij waarde worden vastgelegd.
In het volgende voorbeeld gedragen de functies $fn1 en $fn2 zich op dezelfde manier.
Voorbeeld: Pijlfuncties leggen variabelen automatisch bij waarde vast
<?php
$y = 1;
$fn1 = fn($x) => $x + $y;
// equivalent aan het gebruik van $y bij waarde:
$fn2 = function ($x) use ($y) {
return $x + $y;
};
var_export($fn1(3));
?>
4
Dit werkt ook als de pijlfuncties genest zijn:
Voorbeeld: Pijlfuncties leggen variabelen automatisch bij waarde vast, zelfs wanneer genest
<?php
$z = 1;
$fn = fn($x) => fn($y) => $x * $y + $z;
// Geeft 51
var_export($fn(5)(10));
?>
Evenals anonieme functies, staat de syntaxis van pijlfuncties willekeurige functietekens toe, inclusief parameter- en retourtypes, standaardwaarden, variadics, en ook bij-referentie doorgeven en retourneren. Al het volgende zijn geldige voorbeelden van pijlfuncties:
Voorbeeld: Voorbeelden van pijlfuncties
<?php
fn(array $x) => $x;
static fn($x): int => $x;
fn($x = 42) => $x;
fn(&$x) => $x;
fn&($x) => $x;
fn($x, ...$rest) => $rest;
?>
Pijlfuncties gebruiken bij-waarde variabele binding.
Dit is ruwweg gelijk aan het uitvoeren van een use($x) voor elke
variabele $x die binnen de pijlfunctie wordt gebruikt.
Een bij-waarde binding betekent dat het niet mogelijk is om waarden
uit de buitenste scope te wijzigen.
Anonieme functies kunnen in plaats daarvan worden gebruikt voor bij-referentie bindingen.
Voorbeeld: Waarden uit de buitenste scope kunnen niet worden gewijzigd door pijlfuncties
<?php
$x = 1;
$fn = fn() => $x++; // Heeft geen effect
$fn();
var_export($x); // Geeft 1
?>
Opmerking: > Het is mogelijk om
func_num_args,func_get_argenfunc_get_argsvanuit een pijlfunctie te gebruiken.