PHPクロージャ(Closure)の使い方を詳しく解説_PHPチュートリアル
私は無意識のうちに PHP がバージョン 5.5 にリリースされていることを発見し、PHP5.2 を使用しています。そのため、私は山から来た田舎の若者のように見えます。 JavaScript でのクロージャの使用に慣れた後、私は突然 PHP のクロージャに興味を持ち始めました。
そこで、PHP5.3 バージョンである WAMP 統合開発環境をオンラインでダウンロードしました (PHP5.3 ではクロージャー機能が導入され始めました)。WAMP はインストールして使用するのに非常に便利だと言わざるを得ません。簡単な設定が完了したら、始めてみましょう。
匿名関数
クロージャに関しては、クロージャ関数(クロージャ)とも呼ばれる匿名関数を考える必要があります。PHPクロージャの実装は主にそれに依存しているようです。匿名関数の宣言は次のようになります:
$func = function() {
} //ターミネータ付き
;無名関数には名前がありません。使用する場合は変数に返す必要があります。匿名関数も通常の関数と同様にパラメータを宣言でき、呼び出し方法も同じです:
$func = function( $param ) {
echo $param;
};
$func( '何らかの文字列' );
//Output:
//some string
ちなみに、PHP がクロージャーを導入する前には、匿名関数を作成できる関数 create function もありましたが、コード ロジックは文字列としてしか記述できず、非常に見栄えがします。あまり知られていないため、維持するのが簡単ではないため、使用する人はほとんどいません。
クロージャを実装する
匿名関数を通常の関数のパラメータとして渡し、それを返すこともできます。これにより、単純なクロージャが実装されます。
以下に 3 つの例があります
//例 1
//関数内に匿名関数を定義して呼び出します
function printStr() {
$func = function ( $str ) {
echo $str;
printStr();
//例2
//関数内で無名関数を返して呼び出すfunction getPrintStrFunc() {
$func = function( $str ) { echo $str;
};
return $func;
}
$printStrFunc = getPrintStrFunc();
$printStrFunc( '何らかの文字列' );
//匿名関数をパラメータとして渡して呼び出します
function callFunc( $func ) { $func( 'some string' );
}
$printStrFunc = function( $str ) {
echo $str;
};
//匿名関数を直接渡すこともできます。 jsを知っている人ならこの書き方はおなじみかもしれません
callFunc( function( $str ) {
echo $str;
クロージャと外部変数を繋ぐキーワード: USE
クロージャは場所を保存できる 一部の変数とコードブロックコンテキストの値。 PHP のデフォルトでは、匿名関数は、それが配置されているコード ブロックのコンテキスト変数を呼び出すことはできませんが、 use キーワードを使用する必要があります。
コードをコピーします
$ func ();
getMoney();
//出力:
//1
//エラーレポート、ドル変数が見つかりません
ご覧のとおり、 use キーワードでドルが宣言されておらず、この匿名関数では取得できないため、開発中ですのでご注意ください。
匿名関数でコンテキスト変数を変更できるのかと疑問に思う人もいるかもしれませんが、それは不可能であることがわかりました:
コードをコピー
コードは次のとおりです:
function getMoney() {
$rmb = 1;
ああ、use が参照しているのは変数の単なるコピーであることがわかりました。ただし、コピーではなく、変数への完全な参照が必要です。
この効果を実現するには、変数の前に & 記号を追加するだけです:
function getMoney() {
$rmb = 1;
$func = function( ) use ( &$rmb ) {
echo $rmb;
getMoney();
//出力:
//1
//2
さて、匿名関数はコンテキスト変数を参照できます。匿名関数を外部に返すと、匿名関数は use で参照した変数を保存しますが、外部からはこれらの変数を取得できなくなります。このようにすると、「クロージャ」の概念がより明確になるかもしれません。
説明に従って上記の例を変更します:
コードをコピーします
コードは次のとおりです:
$getMoney();
$getMoney();
$getMoney();
//出力:
//1
//2
//3
概要
PHP クロージャの特性については、それほど驚くべきことではありません。実際、CLASS を使用することで、同様の機能、またはさらに強力な機能を実現できます。ましてや JS のクロージャは同等であり、将来的には PHP のクロージャ サポートの改善に期待するほかありません。ただし、匿名関数は依然として非常に便利です。たとえば、preg_replace_callback などの関数を使用する場合、コールバック関数を外部で宣言する必要はありません。
http://www.bkjia.com/PHPjc/326881.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/326881.html技術記事

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
