PHP闭包变量的范围

Jas*_*vis 5 php closures

我在看的PHP例子Closureshttp://us1.php.net/manual/en/functions.anonymous.php

它提供了下面的示例代码并说明:

闭包还可以从父作用域继承变量.必须在函数头中声明任何此类变量.从父作用域继承变量与使用全局变量不同.全局变量存在于全局范围内,无论执行什么功能,它都是相同的.闭包的父作用域是声明闭包的函数(不一定是从中调用它的函数).请参阅以下示例:

我很困惑这是如何工作的. $quantity$product变量似乎在我看来它们在Closure函数中是可用的.Parent Scope在这种情况下,这个getTotal()功能不是1个范围吗?

在此输入图像描述

dec*_*eze 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"
Run Code Online (Sandbox Code Playgroud)