PHP 中的 Lambda 函数

Sheeraz Gul 2023年1月30日
  1. 在 PHP 中演示如何将 Lambda 函数作为参数传递
  2. 在 PHP 中演示如何的变量中存储 Lambda 函数
  3. PHP 中 LambdaClosure 函数之间的区别
PHP 中的 Lambda 函数

PHP 中的 Lambda 函数是匿名函数,可以存储在变量中或作为参数传递给其他函数。

closure 是一种 lambda 函数,应该知道它的周围环境,但不是每个 lambda 都是 closure

Lambda 需要一个临时函数,该函数将被使用一次。

在 PHP 中演示如何将 Lambda 函数作为参数传递

<?php
$demo_array=array(4,3,1,2,8,9,3,10,5,13);
//usort is a built-in PHP function to sort an array with a given condition.
usort($demo_array, function ($a, $b) {
    return ($a<$b)?-1:1;
});
// We passed an anonymous function that sorts the array in ascending order; this function is the lambda function.

foreach($demo_array as $val){
    echo $val;
    echo "<br>";
}
?>

usort() 是一个内置的 PHP 函数,它接受一个数组和一个函数作为参数;该函数应包含你要对数组进行排序的条件。

上面的代码尝试在给定的 lambda 函数的帮助下按升序对数组进行排序。

输出:

1
2
3
3
4
5
8
9
10
13

在 PHP 中演示如何的变量中存储 Lambda 函数

PHP 中 lambda 函数的其他功能可以存储在变量中。

<?php
$divide = function ($a, $b) {
    return $a / $b;
};
echo $divide(10, 2);
echo "<br>";
echo $divide(15, 2);
echo "<br>";
echo $divide(10, 3);
echo "<br>";
?>

上面的代码创建了一个 lambda 函数,可以将两个数字相除并将它们存储为变量。现在它可以在附近的任何地方用作变量。

输出:

5
7.5
3.3333333333333

PHP 中 LambdaClosure 函数之间的区别

每个 closure 函数都是 lambda 函数,但不是每个 lambda 都是 closure 函数。closure 函数需要了解其周围环境。

<?php
$range = range(10, 20);
//Print the squared number from 10-20 range - an example of lambda.
echo "The output for lambda function: <br>";
print_r(array_map(function($number){
    return $number**2;
}, $range));
echo "<br><br>";

$power = 2;
//Print a warning.
print_r(array_map(function($number){
    return $number**$power;
}, $range));
echo "<br><br>";

//Print the squared number from 10-20 range - an example of closure.
echo "The output for closure function: <br>";
print_r(array_map(function($number) use($power) {
    return $number**$power;
}, $range));
?>

第二个例子是我们试图通过一个变量对数字进行平方,但它不能;这就是 closure 函数的作用。

我们使用 use 关键字将变量传递给函数。现在,这个 lambda 函数是一个 closure 函数。

输出:

The output for lambda function:
Array ( [0] => 100 [1] => 121 [2] => 144 [3] => 169 [4] => 196 [5] => 225 [6] => 256 [7] => 289 [8] => 324 [9] => 361 [10] => 400 )

Notice: Undefined variable: power in C:\Apache24\htdocs\test.php on line 15
Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 1 [4] => 1 [5] => 1 [6] => 1 [7] => 1 [8] => 1 [9] => 1 [10] => 1 )

The output for closure function:
Array ( [0] => 100 [1] => 121 [2] => 144 [3] => 169 [4] => 196 [5] => 225 [6] => 256 [7] => 289 [8] => 324 [9] => 361 [10] => 400 ) 

middle 函数无法对数字进行平方,因为它无法识别外部变量。我们使用 use 关键字传递变量,然后 lambda 变成 closure 函数。

作者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook