我发现下面的代码段很混乱。片段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
答案 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更有趣,因为它将包含匿名函数而不是值。如果要推迟对输入进行一些昂贵的操作,则可以使用此方法,而不是用于所有执行路径。如果您需要对输入执行各种转换,您还可以保留每个调用的原始输入,但这些转换需要访问“原始”输入。