1. ホーム
  2. php

[解決済み] 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 のラムダとクロージャとは?