当前位置: 首页 > news >正文

PHP8的箭头函数-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。

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

Image

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

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

 

http://www.lryc.cn/news/150971.html

相关文章:

  • 初识PHP编程:探索Web开发的起点
  • Git——Windows平台创建gitee私有仓库详解
  • Git基础教程-常用命令整理:学会Git使用方法和错误解决
  • Ops实践 | 国产化KylinOS系统中快速部署企业内部高性能DNS服务器、时间同步服务器 (精选)...
  • stm32之IIC协议
  • 范式 事务 多表查询
  • 基于白鲸算法优化的BP神经网络(预测应用) - 附代码
  • java并发编程 ReentrantLock详解
  • Java获取文件内容IO流
  • Java后端开发面试题——集合篇
  • 如何允许远程访问MySQL
  • 001图机器学习与图神经网络简介
  • 万级数据优化EasyExcel+mybatis流式查询导出封装
  • Unity——脚本序列化
  • es(Elasticsearch)介绍
  • C++中使用 do…while 循环
  • 开源vue动态表单组件
  • 怎么从0到1创建一个PHP框架-1?
  • Qt无边框青绿色主题
  • 200 套基于Java开发的Java毕业设计实战项目(含源码+说明文档)
  • Ansible学习笔记7
  • Python3 对列表、字典以及二者的嵌套数据(JSON)格式排序
  • 如何在B站进行学习直播
  • 老卫带你学---windows上安装minikube
  • Neo-reGeorg隧道搭建
  • Elasticsearch 7.6 - API高阶操作篇
  • 软件第三方验收测评介绍
  • HarmonyOS—使用Web组件加载页面
  • Redis 缓存穿透、击穿、雪崩
  • 设计模式-原型模式详解