この記事では主にphp5.3で導入されたPHPの匿名関数、つまりクロージャ(Closure)とクロージャの役割について詳しく紹介していますので、困っている方にはお勧めです。
クロージャに関しては、クロージャ関数(クロージャ)とも呼ばれる匿名関数を考える必要があります。PHPクロージャの実装は主にそれに依存しているようです。匿名関数の宣言は次のようになります:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
ちなみに、PHP がクロージャを導入する前には、匿名関数を作成できる関数 create function もありましたが、コード ロジックは string としてのみ記述でき、非常に見栄えがします。わかりにくく、メンテナンスも簡単ではないため、使用している人はほとんどいません。
1. クロージャを実装します
通常の関数のパラメータとして匿名関数を渡し、それを返すこともできます。これにより、単純なクロージャが実装されます。
以下に 3 つの例があります
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
|
2. クロージャと外部変数を接続するキーワード: USE
クロージャは、それらが配置されているコード ブロックのコンテキストで一部の変数と値を保存できます。 PHP のデフォルトでは、匿名関数は、それが配置されているコード ブロック内のコンテキスト変数を呼び出すことはできませんが、 use キーワードを使用する必要があります。
別の例を見てみましょう:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
use キーワードでドルが宣言されていないため、この匿名関数では取得できないことがわかります。そのため、開発中はこの問題に注意する必要があります。
匿名関数でコンテキスト変数を変更できるのかと疑問に思う人もいるかもしれませんが、それは不可能であることがわかりました:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
ああ、referencesを使用しているものは単に変数のコピーであることがわかりました。ただし、コピーではなく、変数への完全な参照が必要です。
この効果を実現するには、変数の前に & 記号を追加するだけです:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
それで、匿名関数はコンテキスト変数を参照できるようになります。匿名関数を外部に返すと、匿名関数は use で参照した変数を保存しますが、外部からはこれらの変数を取得できなくなります。このようにすると、「クロージャ」の概念がより明確になるかもしれません。
説明に従って上記の例を変更してください:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
概要
PHP クロージャーの特性については、それほど驚くべきことではありません。実際、JS とは比較できない CLASS を使用することで、同様の機能、またはさらに強力な機能を実現できます。 PHP の クロージャ サポート の今後の改善に期待できます。ただし、匿名関数は依然として非常に便利です。たとえば、preg_replace_callback などの関数を使用する場合、コールバック関数を外部で宣言する必要はありません。
以上がPHPのクロージャ(Closure)無名関数についての予備理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。