1. ホーム
  2. php

[解決済み] 関数内でキーワードを使用する - PHP [重複].

2023-06-27 22:45:38

質問

重複の可能性があります。

Php 5.3.0では、関数の "使用 "識別子は何ですか?まともなプログラマはそれを使うべきでしょうか?

PHPのClosuresを調べていて、気になったのがこれです。

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)

検索するとき use を PHP で検索すると use というキーワードが名前空間で使われていますが、ここでは違うようです。

ありがとうございます。

どのように解決するのですか?

この場合も"use"の使用は正しいです。

クロージャでは、関数のコンテキスト外にある変数にアクセスするには、use関数を使用して関数に明示的に権限を与える必要があります。 この場合の意味は、関数に変数$taxと$totalへのアクセスを許可しているということです。

taxはgetTotal関数のパラメータとして渡され、$totalはクロージャが定義されている行のすぐ上に設定されていることにお気づきでしょう。

もうひとつ注目すべきは、$taxがコピーとして渡されるのに対して、$totalは参照渡し(前に&記号を付ける)であることです。参照渡しをすることで、クロージャは変数の値を変更することができます。この場合、$taxの値を変更しても、$totalの実際の値が変更されるのはクロージャーの中だけです。