Lambda 函数被分配给一个变量或作为参数传递给另一个函数。闭包使用范围之外的变量。
使用 lambda
因为该函数没有名称,所以不能像普通函数那样调用它。相反,您必须将其分配给变量或将其作为参数传递给另一个函数。
// Anonymous function
// assigned to variable
$greeting = function () {
return "Hello world";
}
// Call function
echo $greeting();
// Returns "Hello world"
为了使用匿名函数,我们将它分配给一个变量,然后将该变量作为函数调用。
您还可以将函数传递给另一个函数,如下所示:
// Pass Lambda to function
function shout ($message){
echo $message();
}
// Call function
shout(function(){
return "Hello world";
});
什么是闭包?
闭包本质上与 Lambda 相同,只是它可以访问其创建范围之外的变量。
例如:
// Create a user
$user = "Philip";
// Create a Closure
$greeting = function() use ($user) {
echo "Hello $user";
};
// Greet the user
$greeting(); // Returns "Hello Philip"
正如您在上面看到的,闭包能够访问该$user
变量,因为它是在闭包函数定义的 use 子句中声明的。
如果您要更改$user
闭包中的变量,它不会影响原始变量。要更新原始变量,我们可以附加一个 & 符号。变量前的和号表示这是一个引用,因此原始变量也会被更新。
For example:
// Set counter
$i = 0;
// Increase counter within the scope
// of the function
$closure = function () use ($i){ $i++; };
// Run the function
$closure();
// The global count hasn't changed
echo $i; // Returns 0
// Reset count
$i = 0;
// Increase counter within the scope
// of the function but pass it as a reference
$closure = function () use (&$i){ $i++; };
// Run the function
$closure();
// The global count has increased
echo $i; // Returns 1
本文是 >> culttt.com上 Philip Brown 文章的一部分。您可以在那里找到更多示例。