编程

PHP 7.4 新语法:箭头函数 Arrow Functions

1559 2021-12-23 03:38:44

箭头函数是 PHP 7.4 引入的新语法,是一种更为简洁的匿名函数。

匿名函数和箭头函数都是闭包类的实现

箭头函数的基本形式是: fn(参数)=>表达式

箭头函数支持匿名函数的所有特性,只是使用变量时总是自动获取上级作用域变量(即无需使用 use() 引入函数外参数,类似于 JS 中的箭头函数)

当一个变量在上级作用域中定义时,表达式中的

当表达式中使用的变量是在上级作用域中定义的,变量值会被隐式调用。以下例子 $fn1$fn2 行为是一样的

<?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));
?>

在箭头函数嵌套的情况下同样有效

<?php

$z = 1;
$fn = fn($x) => fn($y) => $x * $y + $z;
// Outputs 51
var_export($fn(5)(10));
?>

和匿名函数一样,箭头函数语法同样允许标准的函数声明,包括参数和返回类型、缺省值、变量,以及通过引用传递和返回。以下都是箭头函数的有效例子。

<?php

fn(array $x) => $x;
static fn(): int => $x;
fn($x = 42) => $x;
fn(&$x) => $x;
fn&($x) => $x;
fn($x, ...$rest) => $rest;

?>

箭头函数会自动绑定上下文变量,这相当于对箭头函数内部使用的每一个变量 $x 执行了一个 use($x)。这意味着不可能修改外部作用域的任何值,若要实现对值的修改,可以使用匿名函数来替代

<?php

$x = 1;
$fn = fn() => $x++; // Has no effect
$fn();
var_export($x);  // Outputs 1

?>

 

PHP