[解決済み] 関数内でキーワードを使用する - 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の実際の値が変更されるのはクロージャーの中だけです。
関連
-
[解決済み】PHP 7.2 - Warning: count(): パラメータは配列かCountableを実装したオブジェクトでなければならない [解決済み]
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] どのような場合に '$this' よりも 'self' を使うべきですか?
-
[解決済み] PHPのエラーを表示させるにはどうしたらいいですか?
-
[解決済み] PHPのstartWith()関数とendsWith()関数
-
[解決済み] PHPでパスワードをハッシュ化するためにbcryptを使用するにはどうすればよいですか?
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「セッションキャッシュリミッターを送信できません - ヘッダーはすでに送信されています」【重複】。
-
[解決済み】メンバ関数をnullで呼び出す?
-
[解決済み】PHPからPythonスクリプトを実行する
-
[解決済み】未定義のメソッド mysqli_stmt::get_result を呼び出す。
-
[解決済み】Netbeans 7.4 for PHPで「スーパーグローバルな$_POST配列に直接アクセスしないでください」という警告が発生する。
-
[解決済み] PHP - ストリームを開くのに失敗しました : そのようなファイルまたはディレクトリがありません。
-
phpのAllowed memory size of 134217728 bytes枯渇問題の解決法
-
[解決済み] オートロードとは何ですか; spl_autoload、__autoload、spl_autoload_register はどのように使うのですか?
-
[解決済み] PHP product.php?id=1 のような URL を作成する方法
-
[解決済み] PHPでは、クロージャとは何ですか?なぜ "use "識別子を使用するのですか?