Php 简明教程
PHP - Anonymous Functions
What are Anonymous Functions?
PHP 允许定义匿名函数。通常,当我们在 PHP 中定义一个函数时,我们会为其提供一个名称,该名称用于在需要时调用该函数。相比之下, anonymous function 是一个在定义时没有任何指定名称的函数。此类函数也称为 closure 或 lambda function 。
PHP allows defining anonymous functions. Normally, when we define a function in PHP, we usually provide it a name which is used to call the function whenever required. In contrast, an anonymous function is a function that doesn’t have any name specified at the time of definition. Such a function is also called closure or lambda function.
有时,您可能只想使用一次函数。匿名函数最常见的一个用法是创建一个 inline callback function 。
Sometimes, you may want a function for one time use only. The most common use of anonymous functions is to create an inline callback function.
匿名函数是使用 Closure 类实现的。闭包是一个匿名函数,它围绕其定义的环境进行闭合。
Anonymous functions are implemented using the Closure class. Closure is an anonymous function that closes over the environment in which it is defined.
用于定义匿名函数的 syntax 如下 −
The syntax for defining an anonymous function is as follows −
$var=function ($arg1, $arg2) { return $val; };
请注意, function 关键字与左括号之间没有函数名,并且函数定义后有一个分号。这意味着匿名函数定义是表达式。当分配给变量时,可以使用变量名稍后调用匿名函数。
Note that there is no function name between the function keyword and the opening parenthesis, and the fact that there is a semicolon after the function definition. This implies that anonymous function definitions are expressions. When assigned to a variable, the anonymous function can be called later using the variable’s name.
Anonymous Function as a Callback
匿名函数通常用作回调。回调函数用作另一个函数的参数之一。匿名函数即时执行,其返回值成为父函数的参数,父函数可以是内置函数,也可以是用户定义的函数。
Anonymous functions are often used as callbacks. Callback functions are used as one of the arguments of another function. An anonymous function is executed on the fly and its return value becomes the argument of the parent function, which may be either a built-in or a user-defined function.
Example
在此示例中,我们在 usort() 函数中使用匿名函数,这是一个使用用户定义的比较函数按值对数组进行排序的内置函数。
In this example, we use an anonymous function inside the usort() function, a built in function that sorts an array by values using a user-defined comparison function.
<?php
$arr = [10,3,70,21,54];
usort ($arr, function ($x , $y) {
return $x > $y;
});
foreach ($arr as $x){
echo $x . "\n";
}
?>
它将生成以下 output −
It will produce the following output −
3
10
21
54
70
Example
以下示例使用匿名函数计算数组中连续数字之后的累积和。在此,我们使用 array_walk() 函数。此函数将用户定义的函数应用于数组中的每个元素。
The following example uses an anonymous function to calculate the cumulative sum after successive numbers in an array. Here, we use the array_walk() function. This function applies a user defined function to each element in the array.
<?php
$arr=array(1,2,3,4,5);
array_walk($arr, function($n){
$s=0;
for($i=1;$i<=$n;$i++){
$s+=$i;
}
echo "Number: $n Sum: $s". PHP_EOL;
});
?>
它将生成以下 output −
It will produce the following output −
Number: 1 Sum: 1
Number: 2 Sum: 3
Number: 3 Sum: 6
Number: 4 Sum: 10
Number: 5 Sum: 15
Anonymous Function as Closure
闭包也是一个匿名函数,可以在 " use " 关键字的帮助下访问其作用域之外的变量。
Closure is also an anonymous function that can access the variables outside its scope with the help of the "use" keyword.
Example
请看以下示例 −
Take a look a the following example −
<?php
$maxmarks=300;
$percent=function ($marks) use ($maxmarks) {
return $marks*100/$maxmarks;
};
$m = 250;
echo "Marks = $m Percentage = ". $percent($m);
?>
它将生成以下 output −
It will produce the following output −
Marks = 250 Percentage = 83.333333333333