以下三个片段有什么区别

时间:2017-07-18 05:10:19

标签: php function

我发现下面的代码段很混乱。片段1是明确的,每个人都知道它。其他两个片段的作用是什么?它们的意义是什么以及使用哪些原因?

# Snippet 1
public function __construct (array $items) {
    $this->items = $items;
}

# Snippet 2
public function __construct (array $items) {
    $this->items = function () use ($items) {
        return $items;
    };
}

# Snippet 3
public function __construct (array $items) {
    $this->items = (function (...$items) {
        return $items;
    })(...$items);
}

第三个片段来自SOLIDay 2015 - Marco Pivetta - Extremely defensive PHP #7

2 个答案:

答案 0 :(得分:1)

您的代码段2使用了PHP匿名函数。阅读本页:http://php.net/manual/en/functions.anonymous.php示例#3包含您的答案。

您的代码snipet 3使用PHP匿名函数和PHP可变长度参数列表。阅读本页:http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list.new

答案 1 :(得分:1)

代码段1和3会为您提供类似的结果,但第三个代码段中的$this->items数组不包含任何原始密钥。

Snippet 2更有趣,因为它将包含匿名函数而不是值。如果要推迟对输入进行一些昂贵的操作,则可以使用此方法,而不是用于所有执行路径。如果您需要对输入执行各种转换,您还可以保留每个调用的原始输入,但这些转换需要访问“原始”输入。