在创建函数时,我在各种编码示例中看到了不同的编码风格。
使用创建函数有什么区别
$provider = function() { code here }
对比
function provider(){ code here }
第一个例子只是一个简短的版本:$data = provider();
?
我们什么时候使用第一个例子?
不,不是。第一个代码是闭包的声明,即匿名函数。它没有名字,可以用持有它的标识符来调用。第二个示例是普通函数(更具体地说,是用户定义的函数),因此,它可以通过它的名称在所有范围内访问 - 不像闭包,它只能在定义它的范围内调用。
您可以拥有任意数量的闭包——它们只是可调用的实体,例如这是有效的:
$provider = function() { Code here }
$another = function() { Code here } //same code
- 并且调用$provider
(例如,使用call_user_func())将与$another
另一个显着的区别是闭包可以接受上下文参数,例如:
$provider = function() use ($param1, $param2, ...) { Code here }
- 所以在它的主体上下文参数中将可用。上下文参数与通常的参数不同——因为上下文参数的定义和存在独立于闭包,而参数在调用发生时被评估。
第一个声明是匿名函数。赋值后,我们有一个名为 $provider 的变量,可以调用 $provider() 。第二个声明它只是正常的函数。匿名函数可以是用户,例如array_map、array_filter。例如
$a = array(1, 2, 3, 4, 5);
$res = array_filter(
$a, function ($elem) {
return $elem > 3;
}
);
print_r($res);
输出元素谁大 3