箭头函数是 PHP 7.4 的新语法,是一种更简洁的匿名函数写法。
箭头函数的基本语法为 fn (argument_list) => expr
。
示例 #1 箭头函数自动捕捉变量的值
<?php $y = 2; //箭头函数写法 $fn1 = fn($x) => $x + $y; //匿名函数写法 $fn2 = function ($x) use ($y) { return $x + $y; }; var_export($fn1(3)); ?>
在上面的示例中,$fn1 与 $fn2 写法不同但是意义完全相同,其中箭头函数不需要 use 可以自动捕捉变量的值,箭头函数在嵌套情况下仍然有效,参见示例2。
示例 #2 箭头函数嵌套自动捕捉变量的值
<?php $z = 1; $fn = fn($x) => fn($y) => $x * $y + $z; var_export($fn(5)(10)); ?>
以上示例最终会输出 51。
因为箭头函数是匿名函数的简单写法,因此和匿名函数一样,箭头函数语法同样允许标准的函数声明,包括参数和返回类型、缺省值、变量,以及通过引用传递和返回。以下都是箭头函数的有效例子。
示例 #3 合法的箭头函数例子
<?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)
。这意味着不可能修改外部作用域的任何值,若要实现对值的修改,应该使用匿名函数来替代。
示例 #4 来自外部范围的值不能在箭头函数内修改,而匿名函数可以通过引用传递实现
<?php
$x = 1;
$fn1 = fn() => $x++; // 不会影响 x 的值
$fn1();
var_export($x); // 输出 1
$fn2 = function() use(&$x){
$x++;
};//引用传递,会改变 x 的值
var_export($x); // 输出 2
?>
想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
如有侵权请发送邮件至1943759704@qq.com删除
码农资源网 » PHP 箭头函数(=>)详解
本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
如有侵权请发送邮件至1943759704@qq.com删除
码农资源网 » PHP 箭头函数(=>)详解