[解決済み] PHPのクロージャ...正確には何なのか、そしていつ使う必要があるのか?
2023-05-03 02:15:34
質問
私は、最新のオブジェクト指向の方法でプログラミングをしています。PHPが実装しているオブジェクト指向のさまざまな側面を定期的に利用していますが、クロージャを使う必要があるのはいつなのか疑問に思っています。クロージャを実装するとどんなときに便利なのか、わかる専門家がいたら教えてください。
どのように解決するのですか?
PHP は 5.3 でクロージャをネイティブにサポートする予定です。 クロージャは、ある小さな、特定の目的のためだけに使われるローカル関数が欲しい場合に適しています。 そのため クロージャのRFC が良い例です。
function replace_spaces ($text) {
$replacement = function ($matches) {
return str_replace ($matches[1], ' ', ' ').' ';
};
return preg_replace_callback ('/( +) /', $replacement, $text);
}
これによって
replacement
の中で局所的に関数を定義することができます。
replace_spaces()
になるように、です。
1)
グローバル名前空間を乱雑にする
2)
3年後の人々に、グローバルに定義された関数が、他の1つの関数の中でしか使われていないことを不思議に思わせる。
それは物事を整理しておくためです。この関数自体に名前がないことに注目してください。
$replacement
.
しかし、PHP 5.3 を待つ必要があることを忘れないでください :)
また、クロージャのスコープ外の変数にアクセスするには、キーワード
use
. この例を考えてみましょう。
// Set a multiplier
$multiplier = 3;
// Create a list of numbers
$numbers = array(1,2,3,4);
// Use array_walk to iterate
// through the list and multiply
array_walk($numbers, function($number) use($multiplier){
echo $number * $multiplier;
});
優れた説明がここにあります。 php のラムダとクロージャとは?
関連
-
[解決済み】php, mysql - データベースへの接続数が多すぎるエラー
-
[解決済み] libapache2-mod-php7 パッケージの場所がわからない
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] PHPでパスワードをハッシュ化するためにbcryptを使用するにはどうすればよいですか?
-
[解決済み] mixinとは何か、なぜ有用なのか?
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] Long-Polling、Websocket、Server-Sent Events (SSE)、Cometとは何ですか?
-
[解決済み] PHPでは、クロージャとは何ですか?なぜ "use "識別子を使用するのですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み] リファレンス - このシンボルは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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Notice: 非オブジェクトのプロパティを取得しようとしているエラー
-
[解決済み】「初期通信パケットの読み込み」でMySQLサーバーに接続できなくなり、システムエラーになる。0
-
[解決済み】stdClassクラスのオブジェクトが文字列に変換されない。
-
[解決済み】Xampp ローカルホスト/ダッシュボード
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み】Chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING エラーが発生しました。
-
[解決済み】Laravel 5.2 Storage::makeDirectory($dir) でディレクトリが作成されない。
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない
-
[解決済み】書き込みコンテキストでメソッドの戻り値を使用することができない
-
[解決済み】phpのシンタックスエラー、予期しないT_IFエラーを修正する方法は?[クローズド]。