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