我正在查看http://us1.php.net/manual/en/functions.anonymous.php
上Closures
的PHP示例
它提供了下面的示例代码并说明:
闭包还可以从父作用域继承变量。任何这样的 变量必须在函数头中声明。继承 父作用域中的变量与使用全局不同 变量。全局变量存在于全局范围内,即 无论执行什么功能都一样。 a的父范围 闭包是声明闭包的功能(不是 必然是从它调用的功能)。请参阅以下内容 例如:
我很困惑这是如何工作的。我认为$quantity
和$product
变量在Closure函数中不可用。在这种情况下Parent Scope
功能不是getTotal()
是1范围?
答案 0 :(得分:11)
你误解了功能签名。 $quantity
和$product
是在调用函数时将传递给函数的常规参数,它们确实不存在于父作用域中,并不意味着。 use ($tax, &$total)
是来自父作用域的关闭变量。
$foo = 'foo'; // closed over variable
// vvvv
$func = function ($bar) use ($foo) {
// ^^^^
// regular function argument
return $foo . $bar;
};
echo $func('baz'); // "foobaz"
答案 1 :(得分:1)
闭包参数$quantity
和$product
本身并不存在于函数定义中,它们只是占位符,array_walk将在其执行过程中填充实际值。 use
参数是您导入 array_walk调用的范围的额外变量,否则该函数无法使用。
答案 2 :(得分:0)