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.566155.com/41.html

猜你喜欢

PHP8的继承和多态-PHP8知识详解

导读:我们在前面的时候讲过《面向对象编程的特点》时,面向对象编程具有3大特点:封装性、继承性和多态性。 集成和多态的根本作用就是完成代码的重用。下面就来讲解PHP8的继承和多态。

2023-09-27  分类:PHP  浏览:1023次


PHP8中伪变量“$this->”和操作符“::”的使用-PHP8知识详解

导读:对象不仅可以调用自己的变量和方法,也可以调用类中的变量和方法。php8通过伪变量“$this->”和操作符“::”来实现这些功能。

2023-09-27  分类:PHP  浏览:741次


PHP8中的构造方法和析构方法-PHP8知识详解

导读:今日分享的内容是PHP8中的构造方法和析构方法,我们把构造方法和析构方法这两个方法分开来讲:

2023-09-27  分类:PHP  浏览:618次


PHP8的类与对象的基本操作之类常量-PHP8知识详解

导读:PHP 8引入了一种新的特性,称为类常量(Class Constants)。类常量是在类中定义的常量,类似于全局常量,但作用域仅限于定义它们的类。 在PHP 8中,类常量的作用域被限制在定义它们的类中。这意味着只有类的成员方法或静态方法才能访问类常量。在其他上下文中,如类的实例方法或全局范围内,类常量将不可见。

2023-09-27  分类:PHP  浏览:639次


PHP8的类与对象的基本操作之成员变量-PHP8知识详解

导读:成员变量是指在类中定义的变量。在类中可以声明多个变量,所以对象中可以存在多个成员变量,每个变量将存储不同的对象属性信息。

2023-09-27  分类:PHP  浏览:625次


PHP8的类与对象的基本操作之类的实例化-PHP8知识详解

导读:定义完类和方法后,并不是真正创建一个对象。类和对象可以描述为如下关系。类用来描述具有相同数据结构和特征的“一组对象”,“类”是“对象”的抽象,而“对象”是“类”的具体实例,即一个类中的对象具有相同的“型”,但其中每个对象却具有各不相同的“值”。

2023-09-27  分类:PHP  浏览:622次


PHP8的类与对象的基本操作之成员方法-PHP8知识详解

导读:成员方法是指在类中声明的函数。在类中可以声明多个函数,所以对象中可以存在多个成员方法。类的成员方法可以通过关键字进行修饰,从而控制成员方法的商用权限。

2023-09-27  分类:PHP  浏览:634次


PHP8的类与对象的基本操作之定义类-PHP8知识详解

导读:在PHP8中,定义类的关键字是class,定义类的语法格式如下: 其中,修饰符是可选项,常见的修饰符包括public、private和protected。

2023-09-27  分类:PHP  浏览:660次


认识面向对象-PHP8知识详解

导读:面向对象编程,也叫面向对象程序设计,是在面向过程程序设计的基础上发展而来的,它比面向过程编程具有更强的灵活性和扩展性。 它用类、对象、关系、属性等一系列东西来提高编程的效率,其主要的特性是可封装性、可继承性和多态性。

2023-09-27  分类:PHP  浏览:624次


PHP8中调换数组中的键值和元素值-PHP8知识详解

导读:在PHP8中使用array_flip()函数可以调换数组中的键值和元素值。

2023-09-27  分类:PHP  浏览:588次