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