1

私はこのようなコードを見つけましたが、それが何をするのかわかりません

$callback = function ($pricePerItem) use ($tax, &$total) {
    $total += $pricePerItem * ($tax + 1.0);
};

phpドキュメントは言うだけ

'use'キーワードは、クロージャー構造にも適用されます。

しかし、それが実際に何をするのか説明はありません。

4

2 に答える 2

3

スコープを制御します。この場合、変数$tax$totalは無名関数の外部で宣言されます。それらはuse-clauseにリストされているため、内部からアクセスできます。

アンパサンドにより、変数が完全に共有されます。たとえば、クロージャー内で行われた変更は、外部スコープに反映されます。の場合$tax、変数はコピーであるため、クロージャー内から変更することはできません。

匿名関数をサポートする他のほとんどの言語は、デフォルトで字句スコープを持っていますが、PHPにはすでに他のスコープ規則があるため、これにより、あらゆる種類の奇妙な状況が発生し、下位互換性が失われます。リゾートとして、この-かなり厄介な-ソリューションが導入されました。

于 2012-05-07T07:58:57.363 に答える
1

これを確認してください-http://php.net/manual/en/functions.anonymous.php、無名関数がローカル変数(コードの場合は$tax$total)を使用する場合は、useそれらを参照するために使用する必要があります。

于 2012-05-07T08:08:36.960 に答える