php 7.4 引入了箭头函数(Arrow Functions),并在 PHP 8 中得到了进一步改进和扩展。
箭头函数是一种更简洁的匿名函数形式,它们提供了一种更便捷的方式来定义轻量级的、单行的回调函数。
箭头函数的语法如下:
这里是一个示例:
上面的代码定义了一个箭头函数 $addition,它接受两个参数 $a 和 $b,并返回它们的和。通过调用 $addition(2, 3),我们可以得到结果 5。
注意,箭头函数没有自己的作用域,它们继承父作用域的变量。这意味着,在箭头函数内部访问外部变量时,它会查找最近的包含该箭头函数的作用域。
下面再看一个使用箭头函数的示例:
以上代码在PHP8中运行结果是:
上述代码中,我们使用array_map()函数对数组中的每个元素进行平方操作,并通过箭头函数fn($num) => $num ** 2指定了这个转换过程。执行后,将打印出经过平方操作后的结果数组。
箭头函数与传统的匿名函数之间的区别包括:
1、箭头函数没有显式的 use 声明,它们自动捕获所需的变量。
2、箭头函数不能包含多条语句或复杂的控制结构,只能包含单个表达式。
3、箭头函数隐式返回其表达式的值,无需使用 return 关键字。
需要注意的是,箭头函数不会创建新的作用域,因此无法访问外部的变量或常量。如果需要在箭头函数中使用外部变量或常量,需要使用 use 关键字将其引入。
我们看看下面代码:
在PHP8中运行的结果为:
错误在于箭头函数无法访问外部变量 $message。
在 PHP 8 中,箭头函数的作用域是词法作用域。它们不能像匿名函数那样访问外部变量,而是只能访问自己内部的变量。
要修复这个问题,您可以将变量 $message 作为参数传递给箭头函数,或者使用闭包来实现:
上面代码在PHP8中的运行结果为:
spac
领取专属 10元无门槛券
私享最新 技术干货