Funcțiile săgeată au fost introduse în PHP 7.4 ca o sintaxă mai concisă pentru funcțiile anonime.
Atât funcțiile anonime, cât și funcțiile săgeată sunt implementate folosind clasa Closure.
Funcțiile săgeată au forma de bază fn (argument_list) =>
.
expr
Funcțiile săgeată acceptă aceleași caracteristici ca și funcțiile anonime, cu excepția faptului că utilizarea variabilelor din domeniul părinte este întotdeauna automată.
Când o variabilă utilizată în expresie este definită în domeniul părinte, aceasta va fi implicit capturată după valoare. În exemplul următor, funcțiile $fn1 și $fn2 se comportă în același mod.
Exemplul #1 Funcțiile săgeată captează automat variabile după valoare
<?php
$y =
1;
$fn1
= fn($x)
=> $x
+
$y;
// equivalent to using $y by
value:
$fn2
= function ($x)
use ($y)
{
return $x
+
$y;
};
var_export($fn1(3));
?>
Exemplul de mai sus va produce:
4
Acest lucru funcționează și dacă funcțiile săgeată sunt imbricate:
Exemplul #2 Funcțiile săgeată captează automat variabilele după valoare, chiar și atunci când sunt imbricate
<?php
$z =
1;
$fn
= fn($x)
=> fn($y)
=> $x
*
$y +
$z;
// Outputs 51
var_export($fn(5)(10));
?>
Similar cu funcțiile anonime, sintaxa funcției săgeată permite semnături de funcții arbitrare, inclusiv tipuri de parametri și returnări, valori implicite, variadici, precum și trecerea și returnarea referințelor secundare. Toate următoarele sunt exemple valide de funcții săgeată:
Exemplul #3 Exemple de funcții săgeți
<?php
fn(array
$x)
=> $x;
static fn(): int
=>
$x;
fn($x
=
42) =>
$x;
fn(&$x)
=> $x;
fn&($x)
=> $x;
fn($x,
...$rest)
=> $rest;
?>
Funcțiile săgeată folosesc legarea variabilelor după valoare. Acest lucru este aproximativ echivalent cu efectuarea unei
pentru fiecare variabilă $x utilizată în interiorul funcției săgeată. O legare by-value înseamnă că nu este posibil să se modifice nicio valoare din domeniul exterior. Funcțiile anonime pot fi folosite în schimb pentru legăturile by-ref.
use($x)
Exemplul #4 Valorile din domeniul exterior nu pot fi modificate prin funcții săgeată
<?php
$x =
1;
$fn
= fn() =>
$x++;
// Has no effect
$fn();
var_export($x);
// Outputs 1
?>
Modificări
Versiunea Descriptierea
7.4.0 Funcțiile săgeată au devenit disponibile.
Note
Notă: Este posibil să utilizați func_num_args(), func_get_arg() și func_get_args() dintr-o funcție săgeată.
Sursa: PHP Manual, licența CC BY 3.0. Traducere și adaptare: Nicolae Sfetcu
Lasă un răspuns