PHP8的箭头函数-PHP8知识详解

php7.4引入了箭头函数(ArrowFunctions),并在PHP8中得到了进一步改进和扩展。箭头函数是一种更简洁的匿名函数形式,它们提供了一种更便捷的方式来定义轻量级的、

php 7.4 引入了箭头函数(Arrow Functions),并在 php 8 中得到了进一步改进和扩展。

箭头函数是一种更简洁的匿名函数形式,它们提供了一种更便捷的方式来定义轻量级的、单行的回调函数

箭头函数的语法如下:

fn (参数列表) => 表达式

这里是一个示例:

<?php
$addition = fn ($a, $b) => $a + $b;
echo $addition(2, 3); 
?>

上面的代码定义了一个箭头函数 $addition,它接受两个参数 $a 和 $b,并返回它们的和。通过调用 $addition(2, 3),我们可以得到结果 5。

注意,箭头函数没有自己的作用域,它们继承父作用域的变量。这意味着,在箭头函数内部访问外部变量时,它会查找最近的包含该箭头函数的作用域。


下面再看一个使用箭头函数的示例:

<?php
$numbers = [1, 2, 3, 4, 5];
// 使用箭头函数计算每个数字的平方,并返回结果数组
$squares = array_map(fn($num) => $num ** 2, $numbers);
print_r($squares);
?>

以上代码在PHP8中运行结果是:

Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )

上述代码中,我们使用array_map()函数对数组中的每个元素进行平方操作,并通过箭头函数fn($num) => $num ** 2指定了这个转换过程。执行后,将打印出经过平方操作后的结果数组。

箭头函数与传统的匿名函数之间的区别包括:

1、箭头函数没有显式的 use 声明,它们自动捕获所需的变量。

2、箭头函数不能包含多条语句或复杂的控制结构,只能包含单个表达式。

3、箭头函数隐式返回其表达式的值,无需使用 return 关键字

需要注意的是,箭头函数不会创建新的作用域,因此无法访问外部的变量或常量。如果需要在箭头函数中使用外部变量或常量,需要使用 use 关键字将其引入。

我们看看下面代码:

<?php
$message = 'Hello';  
$greet = fn($name) => echo $message . ', ' . $name;  
$greet('John'); 
?>

在PHP8中运行的结果为:

Parse error: syntax error, unexpected token "echo" in D:\phpenv\www\localhost\test.php on line 3

错误在于箭头函数无法访问外部变量 $message。

在 PHP 8 中,箭头函数的作用域是词法作用域。它们不能像匿名函数那样访问外部变量,而是只能访问自己内部的变量。

要修复这个问题,您可以将变量 $message 作为参数传递给箭头函数,或者使用闭包来实现:

<?php
$message = 'Hello';
$greet = function ($message) {
    return fn($name) => $message . ', ' . $name;
};
echo $greet('John')('Doe');
?>

上面代码在PHP8中的运行结果为:

John, Doe

space

本文地址:https://www.665800.com/66.html
码字不易,打个赏呗
杨泽业感谢你的支持!

猜你喜欢

2023年10月8日删除的部分cn域名列表

导读:2023年10月8日删除的部分cn域名列表:一、纯数字域名。二、3字母以内域名。三、4字母域名。四、5字母域名。

2023-10-06  分类:资讯  浏览:366次


2023年10月7日删除的部分cn域名列表

导读:2023年10月7日删除的部分cn域名列表:一、纯数字域名。二、3字母以内域名。三、4字母域名。四、5字母域名。

2023-10-06  分类:资讯  浏览:349次


在PHP8中使用instanceof操作符检测对象类型-PHP8知识详解

导读:继承特性简化了对象、类的创建,增加了代码的可重用性。但是PHP只支持单继承,如果想实现多继承,就需要使用接口。PHP可以实现多个接口。

2023-10-06  分类:技能  浏览:383次


使用关键字interface来声明使用接口-PHP8知识详解

导读:继承特性简化了对象、类的创建,增加了代码的可重用性。但是PHP只支持单继承,如果想实现多继承,就需要使用接口。PHP可以实现多个接口。

2023-10-06  分类:技能  浏览:354次


2023年10月6日删除的部分cn域名列表

导读:2023年10月6日删除的部分cn域名列表:一、纯数字域名。二、3字母以内域名。三、4字母域名。四、5字母域名。

2023-10-06  分类:资讯  浏览:345次


2023年10月5日删除的部分cn域名列表

导读:2023年10月5日删除的部分cn域名列表:一、纯数字域名。二、3字母以内域名。三、4字母域名。四、5字母域名。

2023-10-06  分类:资讯  浏览:629次


2023年10月4日删除的部分cn域名列表

导读:2023年10月4日删除的部分cn域名列表:一、纯数字域名。二、3字母以内域名。三、4字母域名。四、5字母域名。

2023-10-06  分类:资讯  浏览:340次


2023年10月3日删除的部分cn域名列表

导读:2023年10月3日删除的部分cn域名列表:一、纯数字域名。二、3字母以内域名。三、4字母域名。四、5字母域名。

2023-10-06  分类:资讯  浏览:349次


2023年10月2日删除的部分cn域名列表

导读:2023年10月2日删除的部分cn域名列表:一、纯数字域名。二、3字母以内域名。三、4字母域名。四、5字母域名。

2023-10-06  分类:资讯  浏览:593次


2023年10月1日删除的部分cn域名列表

导读:2023年10月1日删除的部分cn域名列表:一、纯数字域名。二、3字母以内域名。三、4字母域名。四、5字母域名。

2023-10-06  分类:资讯  浏览:303次