PHP.nl

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_arg en func_get_args vanuit een pijlfunctie te gebruiken.

Documentatie