2

在创建函数时,我在各种编码示例中看到了不同的编码风格。

使用创建函数有什么区别

$provider = function() { code here }

对比

function provider(){ code here }

第一个例子只是一个简短的版本:$data = provider();
我们什么时候使用第一个例子?

4

2 回答 2

3

不,不是。第一个代码是闭包的声明,即匿名函数。它没有名字,可以用持有它的标识符来调用。第二个示例是普通函数(更具体地说,是用户定义的函数),因此,它可以通过它的名称在所有范围内访问 - 不像闭包,它只能在定义它的范围内调用。

您可以拥有任意数量的闭包——它们只是可调用的实体,例如这是有效的:

$provider = function() { Code here }
$another  = function() { Code here } //same code

- 并且调用$provider(例如,使用call_user_func())将与$another

另一个显着的区别是闭包可以接受上下文参数,例如:

$provider = function() use ($param1, $param2, ...) { Code here }

- 所以在它的主体上下文参数中将可用。上下文参数与通常的参数不同——因为上下文参数的定义和存在独立于闭包,而参数在调用发生时被评估。

于 2013-10-31T10:50:11.557 回答
0

第一个声明是匿名函数。赋值后,我们有一个名为 $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

于 2013-10-31T11:05:32.947 回答