在一遍又一遍地抱怨编写关键字
function
的麻烦任务后,我向某人询问了一种更简单的方法。该人士表示 PHP 将具有类似于 es6 的箭头函数语法。
const foo = (x, y) => {
return x + y;
};
当我继续研究这个问题时,我在网上找不到很多例子。
有合适的人可以解释一下吗?
此时,我也对它如何适应 PHP 的 OOP 方面非常感兴趣。
2018年2月的原始答案:
这似乎是https://wiki.php.net/rfc/arrow_functions中描述的语法。它确实有一个实验性的实现。
在箭头函数提案中,提到它是“短闭包”提案的替代方案,https://wiki.php.net/rfc/short_closures
截至 2018 年 2 月,PHP 的当前版本为 7.1.4 / 7.2.2。
我找不到任何提案已获得批准的确认信息。前者处于“正在讨论”状态,后者处于“拒绝/撤回支持http://wiki.php.net/rfc/arrow_functions”。我认为现在判断 PHP 未来版本是否会采用它还为时过早。
2019 年 12 月更新:
该功能已在 PHP 7.4 中发布,根据 https://www.php.net/manual/en/migration74.new-features.php
箭头函数提供了一种用于定义函数的简写语法 隐式按值范围绑定。
<?php $factor = 10; $nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
但是PHP手册页中有关匿名函数
的用法尚未更新这是一篇详细介绍的博客:https://stitcher.io/blog/short-closures-in-php
是的。 PHP 7.4 已接受新的 RFC https://wiki.php.net/rfc/arrow_functions_v2
基于 PHP 7.4 的 RFC 代码可能如下
$users->map(
fn($user) => $user->first_name.' '.$user->last_name
);
而不是
$users->map(function($user) {
return $user->first_name.' '.$user->last_name;
});
是的,好消息是 PHP 7.4 中引入了 php 箭头函数,它是 php 匿名函数的简洁语法,箭头函数和匿名函数都是闭包。
这就是箭头函数的基本形式
fn (argument_list) => expr.
所以
fn
现在是php的保留关键字。
这是 php 箭头函数的示例。
$double = fn($x) => $x * 2;
echo $double(5);
其输出是:10
但是 php 箭头函数只接受单个表达式。您不能在其中写入多个表达式。尽管您可以使用多行来编写单个表达。示例:
$ageCalculator = fn($brithYear) =>
$brithYear
? 2024 - $brithYear
: null;
echo "Your are ". $ageCalculator(1991)." Years old.";
输出为:Your are 33 Years old.
注意:在上面的例子中你可以看到我在多行中写了一个express。但如果你尝试编写多个表达式,php 仍然不支持,就像 javascript 一样。
<script>
const ageCalculator = (year) => {
const new_age = 2024 - year;
return new_age;
}
console.log("Your new age is " + ageCalculator(1991));
</script>
控制台输出为:Your new Age is 33
但是如果你想在php中编写多个表达式,你应该使用php匿名函数。示例:
$ageCalculator = function($brithYear){
isset($brithYear) ?? null;
if ($brithYear != null) {
$age = 2024 - $brithYear;
}
return $age;
};
echo "Your are ". $ageCalculator(1991)." Years old.";
输出为:Your are 33 Years old.