"Magento PHP开发人员指南“第2章规定:
Zend 2使用100%面向对象的代码,并利用PHP5.3的大部分新特性,即名称空间、后期静态绑定、lambda函数和闭包。
虽然post “闭包”和“lambda”有什么区别?有一些答案(例如,lambda只是一个匿名函数,闭包是一个可以访问变量的函数,而不是它的参数列表中的变量),但它似乎是特定于programming语言的(其中有些提到了Scheme编程语言)。例如,根据文章,在Python中,似乎可以有非lambdas的闭包和非闭包的lambdas。
然而,我对PHP编程语言感兴趣,而不是Python。下面的一个答案似乎指出,在PHP中,所有的闭包都是lambdas,这与文章中与Python状态有关的内容相冲突。
在我看来,这些概念因语言而异,我对PHP很感兴趣,因此我发表了这篇文章。
所有这些都让人困惑。虽然我假设lambda函数一般只是未命名的函数,但Wikipedia的以下文章更多地介绍了闭包:
科学/29
虽然PHP中没有示例。
发布于 2013-11-12 14:08:16
闭包是php中的lambda函数,它封装变量,因此一旦它们的原始引用超出范围,就可以使用它们。
闭包是lambda函数,但是lambda函数不是闭包,除非您指定了use关键字。
发布于 2017-01-04 06:36:36
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文章的一部分。你可以在那里找到更多的例子。
发布于 2014-05-07 15:57:13
有一篇特定于PHP的文章,其中有详细的说明和代码示例:http://www.ibm.com/developerworks/library/os-php-5.3new2/。
链接中断警告:截至2014-10-18年,上述链接为404.我从Google缓存中复制了这篇文章,并将这里放在
如果你发现原始文件在任何地方重新出现,请告诉我.
https://stackoverflow.com/questions/19931170
复制相似问题