array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'pt_BR', ), 'this' => array ( 0 => 'functions.arrow.php', 1 => 'Arrow Functions', ), 'up' => array ( 0 => 'language.functions.php', 1 => 'Funções', ), 'prev' => array ( 0 => 'functions.anonymous.php', 1 => 'Funções anônimas', ), 'next' => array ( 0 => 'functions.first_class_callable_syntax.php', 1 => 'Sintaxe de Callable de Primeira Classe', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'pt_BR', 'path' => 'language/functions.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
Arrow functions foram introduzidos a partir do PHP 7.4 como uma sintaxe mais concisa para funções anônimas.
Funções anônimas e arrow functions são implementadas usando a classe Closure.
Arrow functions tem a forma básica
fn (argument_list) => expr
.
Arrow functions possuem a mesmas características das funções anônimas, exceto que o uso de variáveis do escopo pai é sempre automático.
Quando uma variável usada na expressão é definida no escopo pai ele será implicitamente capturado por valor. No exemplo a seguir, as funções $fn1 e $fn2comportam-se da mesma maneira.
Exemplo #1 Arrow functions capturam variáveis por valor automaticamente
<?php
$y = 1;
$fn1 = fn($x) => $x + $y;
// Equivalente ao usar $y por valor:
$fn2 = function ($x) use ($y) {
return $x + $y;
};
var_export($fn1(3));
?>
O exemplo acima produzirá:
4
Isso também funciona se as arrow de functions estiverem aninhadas:
Exemplo #2 Arrow functions capturam variáveis por valor automaticamente, mesmo quando aninhadas
<?php
$z = 1;
$fn = fn($x) => fn($y) => $x * $y + $z;
// Outputs 51
var_export($fn(5)(10));
?>
Da mesma forma que funções anônimas, a sintaxe das arrow functions permitem assinaturas de função arbitrária, incluindo parâmetros e tipos de retorno, valores padrão, variadics, bem como por referência passando e retornando. Todos os exemplos válidos de arrow functions:
Exemplo #3 Examplos de arrow functions
<?php
fn(array $x) => $x;
static fn(): int => $x;
fn($x = 42) => $x;
fn(&$x) => $x;
fn&($x) => $x;
fn($x, ...$rest) => $rest;
?>
Arrow functions usam vinculação de variável por valor.
Isso é aproximadamente equivalente a realizar um use($x)
para cada
variável $x usada dentro da arrow function.
Uma passagem de variável por valor, significa que não é possível modificar quaisquer valores
do escopo externo.
Funções anônimas
podem ser usadas em vez disso para passagem de variável por referência.
Exemplo #4 Valores do escopo externo não podem ser modificados por arrow functions
<?php
$x = 1;
$fn = fn() => $x++; // Não tem efeito
$fn();
var_export($x); // Imprime 1
?>
Versão | Descrição |
---|---|
7.4.0 | Arrow functions tornou-se disponível. |
Nota: É possível usar func_num_args(), func_get_arg(), e func_get_args() de dentro de uma arrow functions.