私はPHP=
public function getTotal($tax)
{
$total = 0.00;
$callback =
function ($quantity, $product) use ($tax, &$total)
{
$pricePerItem = constant(__CLASS__ . "::PRICE_" .
strtoupper($product));
$total += ($pricePerItem * $quantity) * ($tax + 1.0);
};
array_walk($this->products, $callback);
return round($total, 2);
}
そして、このコードでuse
の使用法について説明してください。
function ($quantity, $product) use ($tax, &$total)
PHPでuse
を検索すると、名前空間で使用されているuse
キーワードが見つかりますが、ここでは異なっています。
ありがとう。
この場合も「使用」の使用は正しいです。
クロージャーでは、関数のコンテキスト外にある変数にアクセスするには、use関数を使用して関数に明示的に許可を与える必要があります。この場合の意味は、関数に$ taxおよび$ total変数へのアクセスを許可することです。
クロージャーが定義されている行のすぐ上で$ totalが設定されている間に、$ taxがgetTotal関数のパラメーターとして渡されたことに気付くでしょう。
指摘すべきもう1つのことは、$ taxはコピーとして渡され、$ totalは参照によって渡されることです(前に&記号を追加することによって)。参照渡しにより、クロージャは変数の値を変更できます。この場合の$ taxの値の変更は、クロージャー内でのみ有効で、実際の$ totalの値は変更されます。
PHPで匿名関数を宣言する場合、周囲のスコープ(存在する場合)からどの変数を閉じるか)を指定する必要があります。 use
の後のリストは、クローズする変数のリストです。
つまり、内部関数は、パラメーターだけでなく、外部関数の変数$ taxおよび$ totalを使用できます。