如何在PHP中使用箭头功能与示例
#php #callbackfunction #arrowfunctions #clousures

自PHP版本7.4以来可用,但许多人不了解如何使用它。

箭头函数(也称为short closuresâ)在php 7.4中引入了定义匿名函数的更简洁的方法。它们对于小型,简单的功能特别有用。

,如果您来自其他语言,您已经习惯了使用它们,但是如果不是您的情况,我鼓励您继续阅读文章,我向您展示一些使用示例。

如何使用箭头功能

箭头函数是使用fn关键字定义的,其次是函数参数,箭头(=>)符号和函数主体。

在这里,我们可以看到一个如何实现它的基本示例。

// Anonymous function
$add = function($a, $b) {
    return $a + $b;
};

// Arrow function
$addArrow = fn($a, $b) => $a + $b;

echo $add(2, 3); // Output: 5
echo $addArrow(2, 3); // Output: 5

箭头功能还可以从周围范围捕获变量,与传统封闭不同,箭头功能无需从范围明确定义变量。

$factor = 10;

// Closure
$multiplier = function($n) use ($factor) {
    return $n * $factor;
};

// Arrow function
$multiplierArrow = fn($n) => $n * $factor;

echo $multiplier(5); // Output: 50
echo $multiplierArrow(5); // Output: 50

例子

现在我们已经看到了如何在PHP中定义箭头功能,让我们查看一些如何使用它们的示例。

在示例中,我们可以看到传统的匿名函数和箭头函数都达到了相同的结果。

在数组地图中使用箭头功能

他们使用koude3函数在输入阵列中的每个数字平方。

`将回调应用于给定阵列的元素

ararray_map(?abiaqian4 $callback,array $array,array ...$arrays):数组

$numbers = [1, 2, 3, 4, 5];

// Anonymous function with array_map
$squared = array_map(function($n) {
    return $n * $n;
}, $numbers);

// Arrow function with array_map
$squaredArrow = array_map(fn($n) => $n * $n, $numbers);

print_r($squared);
print_r($squaredArrow);

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

将箭头功能与数组过滤器一起使用

我们使用koude7函数过滤阵列的所有偶数数字。

使用回调函数过滤数组的元素

使用回调函数过滤数组的元素

ararray_filter(array $array,?abiaqan4 $callback = nug,int $mode = 0):array

$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// Anonymous function with array_filter
$evenNumbers = array_filter($numbers, function($n) {
    return $n % 2 === 0;
});

// Arrow function with array_filter
$evenNumbersArrow = array_filter($numbers, fn($n) => $n % 2 === 0);

print_r($evenNumbers);
print_r($evenNumbersArrow);

// Output:
//Array
//(
// [1] => 2
// [3] => 4
// [5] => 6
// [7] => 8
// [9] => 10
//)
//Array
//(
// [1] => 2
// [3] => 4
// [5] => 6
// [7] => 8
// [9] => 10
//)

将箭头功能与数组减少

我们使用koude11函数使用回调函数将数组中的所有值总和。

迭代使用回调函数

迭代将数组减少到单个值

array_reduce(array $arraycallable $callback,混合$initial = null):混合

$numbers = [1, 2, 3, 4, 5];

// Anonymous function with array_reduce
$sumNumbers = array_reduce($numbers, function($carry, $number) {
    return $carry + $number;
}, 0);

// Arrow function with array_reduce
$sumNumbersArrow = array_reduce($numbers, fn($carry, $number) => $carry + $number, 0);

echo $sumNumbers; // Output: 15
echo $sumNumbersArrow; // Output: 15

使用usort使用箭头功能

箭头函数可以在各种上下文中使用,包括通过诸如koude15之类的参考函数来回调数组的回调。按年龄对数组进行排序。

- 使用用户定义的比较函数按值对数组进行排序

用户(array &$arraycallable $callback):true

$people = [
    ['name' => 'Alice', 'age' => 28],
    ['name' => 'Bob', 'age' => 22],
    ['name' => 'Charlie', 'age' => 25],
];

// Sorting using usort with anonymous function
usort($people, function($a, $b) {
    return $a['age'] <=> $b['age'];
});

// Sorting using arrow function
usort($people, fn($a, $b) => $a['age'] <=> $b['age']);

print_r($people);

// Output:
//Array
//(
// [0] => Array
// (
// [name] => Bob
// [age] => 22
// )
//
// [1] => Array
// (
// [name] => Charlie
// [age] => 25
// )
//
// [2] => Array
// (
// [name] => Alice
// [age] => 28
// )
//
//)

我认为,通过这些示例,我们可以看到如何在最常见的情况下实现箭头功能。

如果您认为我已经离开了一些,或者您对某些情况有疑问,请给我发表评论: - )

结论

箭头功能是在PHP 7.4中引入的,是定义匿名函数的更简洁的方法。他们提供了几个优势,但也有一些局限性。这是在PHP中使用箭头功能的优缺点:

优点:

  • 简洁的语法:与传统封闭相比,箭头功能具有更紧凑的语法,这可以使您的代码更清洁,更可读,尤其是对于简单的操作。
  • 更少的样板:箭头功能消除了编写功能关键字和卷曲括号的需求,减少了样板代码的数量。
  • 隐式返回:箭头函数具有隐式返回,这意味着表达式的结果会自动返回而无需返回语句。
  • 短期函数:箭头功能对于在数组函数(例如array_map,array_filter,array_reduce)等高阶功能中使用的短寿命功能特别有用。

缺点:

  • 有限的范围:箭头功能的范围有限,不能用于修改其范围之外的变量。他们不支持使用关键字来捕获周围范围的变量。
  • 单个表达式:箭头函数仅限于单个表达式。它们不能包含多个语句或复杂的逻辑。对于更复杂的功能,您仍然需要使用传统的封闭。
  • 复杂逻辑的可读性:箭头功能可以改善简单操作的代码可读性,但它们可能会使逻辑更难理解。在这种情况下,传统关闭可能更合适。
  • 兼容性:PHP 7.4中引入了箭头功能。如果您需要与较旧的PHP版本保持兼容性,则不能使用箭头功能。

在箭头功能和传统关闭之间进行选择:

  • 使用箭头函数用于适合单个表达式并且不需要修改变量的简单操作。
  • 当您需要更复杂的逻辑,多个语句或需要从周围范围捕获变量时,请使用传统封闭。
  • 在决定使用箭头功能还是传统关闭时,请考虑代码的总体可读性和可维护性。

总而言之,箭头函数可以是为简单操作编写简洁且可读的代码的强大工具。但是,重要的是要意识到它们的局限性并根据您的代码的特定上下文和复杂性选择适当的工具。