ホームページ バックエンド開発 PHPチュートリアル PHP 5.3 クロージャ構文の概要 function() use() {}_PHP チュートリアル

PHP 5.3 クロージャ構文の概要 function() use() {}_PHP チュートリアル

Jul 13, 2016 pm 05:16 PM
function php use 導入 関数 参加する 匿名 文法 閉鎖

PHP 5.3 では、開発者がインライン関数を宣言して変数に保存できる、匿名関数とも呼ばれるクロージャー構文が追加されています。この構文は JavaScript クロージャーと比べると少し奇妙ですが、PHP 言語への優れた追加です

コードは次のとおりです コードをコピー
/**
* 以下のコードは PHP5.3 以降で正常に動作します。
*/
関数コールバック($callback) {
$callback();
}
//出力: これは匿名関数です。
/n
//ここでは、転送用の匿名関数を直接定義します。以前のバージョンでは、これは利用できませんでした。
// さて、この構文は非常に快適で、基本的に JavaScript 構文と同じです。これが基本であると言われる理由は、読み続ける必要があるためです
。 //結論: 快適な文法は間違いなく人気になります
コールバック(関数() {
print "これは匿名関数です。
/n";
});
//出力: これはクロージャを使用する文字列値です。メッセージは次のとおりです: こんにちは、皆さん。
/n
//ここでまずクロージャを定義し、今度は戸籍簿に名前が載っています...
//使用してください、新鮮な男...
//ご存知のとおり、クロージャ: 内部関数は外部関数で定義された変数を使用します。
//PHP の新しく開かれたクロージャ構文では、クロージャの外側で定義された変数を使用するために use を使用します。
//ここでは外部変数 $msg を使用します。定義後、その値はクロージャーの実行後に変更され、元の値が出力されます。 //結論: 値によって渡される基本型パラメーターの場合、クロージャーの使用の値はクロージャーの作成時に決定されます。
$msg = "皆さん、こんにちは";
$callback = function () use ($msg) {
print "これはクロージャを使用する文字列値です。msg は $msg.
/n";
};
$msg = "皆さん、こんにちは";
コールバック($callback);
//出力: これは文字列値の遅延バインドを使用するクロージャです。メッセージは次のとおりです: こんにちは、皆さん。
/n
//参照メソッドを変更します。参照メソッドを使用します
//今回の出力はクロージャ定義後の値であることが分かります...
//これを理解するのは実際には難しくありません。参照によって使用し、クロージャーは $msg 変数のアドレスを使用します
//後で$msgというアドレスの値が変更された場合、このアドレスの値をクロージャで出力すると自然に変更されます
$msg = "皆さん、こんにちは";
$callback = function () use (&$msg) {
print "これは文字列値の遅延バインドを使用するクロージャです。メッセージは $msg です。
/n";
};
$msg = "皆さん、こんにちは";
コールバック($callback);
//出力: これはクロージャ使用オブジェクトです。メッセージは: こんにちは、皆さん。
/n
// クロージャの出力は、以前にコピーされたオブジェクトで、その値は Hello,Everyone で、その後に $obj という名前が再割り当てされます。 //こう考えてみてはいかがでしょうか
//1. obj はオブジェクトの名前です 皆さんこんにちは
//2. オブジェクト Hello,Everyone はクロージャによって使用され、クロージャは Hello,Everyone オブジェクトへの参照を生成します
//3. obj はオブジェクトの名前に変更されます 皆さん、こんにちは
//4. こんにちは、みなさんオブジェクトではなく、obj という名前で表されるエンティティが変更されていることに注意してください。したがって、自然クロージャの出力は以前のこんにちは、みなさん
のままです。 $obj = (オブジェクト) "皆さん、こんにちは";
$callback = function () use ($obj) {
print "これはクロージャ使用オブジェクトです。メッセージは: {$obj->scalar}.
/n";
};
$obj = (オブジェクト) "皆さん、こんにちは";
コールバック($callback);
//出力: これはクロージャ使用オブジェクトです。メッセージは: こんにちは、皆さん。
/n
//上記の手順に従って、段階的に実行してみましょう:
//1. オブジェクト名は Hello,Everyone オブジェクトを指します
//2. クロージャーは、Hello,Everyone オブジェクトを指す参照を生成します
//3. obj 名が指すオブジェクトのスカラー値を変更します (つまり、Hello,Everyone オブジェクト)。 //4. クロージャを実行すると、実際には実際のオブジェクトは 1 つだけなので、出力は自然に次のようになります。 $obj = (オブジェクト) "皆さん、こんにちは";
$callback = function () use ($obj) {
print "これはクロージャ使用オブジェクトです。メッセージは: {$obj->scalar}.
/n";
};
$obj->scalar = "皆さん、こんにちは";
コールバック($callback);
//出力: これはクロージャ使用オブジェクトの遅延バインドです。メッセージは: こんにちは、皆さん。
/n
// クロージャは何を参照していますか? &$obj、クロージャによって生成された参照は、名前 $obj.
が指すアドレスを指します。 //したがって、obj がどんなに変化しても、逃げ場はありません....
//つまり、出力は変更された値になります
$obj = (オブジェクト) "皆さん、こんにちは";
$callback = function () use (&$obj) {
print "これはクロージャ使用オブジェクト遅延バインドです。メッセージは: {$obj->scalar}.
/n";
};
$obj = (オブジェクト) "皆さん、こんにちは";
コールバック($callback);
/**
* クロージャを使用したカウンタジェネレータ
※これは実際にPythonでクロージャを導入する例に基づいています...
* このように考えることができます:
* 1. counter 関数が呼び出されるたびに、ローカル変数 $counter が作成され、1 に初期化されます。
* 2. 次に、ローカル変数 $counter への参照を生成するクロージャーを作成します。
* 3. 関数 counter は作成したクロージャを返し、ローカル変数を破棄しますが、このときクロージャから $counter への参照があり、
* リサイクルされないので、関数カウンターによって返されるクロージャはフリー状態を保持します
と理解できます。 * 変数
* 4. counter の呼び出しごとに独立した $counter とクロージャが作成されるため、返されるクロージャは互いに独立しています。
* 5. 返されたクロージャを実行し、クロージャが保持する自由状態変数をインクリメントして返します。結果はカウンタです
* 結論: この関数は独立したカウンターを生成するために使用できます。
*/
関数 counter() {
$counter = 1;
return function() use(&$counter) {return $counter ++;};
}
$counter1 = counter();
$counter2 = counter();
echo "counter1: " 。 $counter1() 。 "
/n";
echo "counter1: " 。 $counter1() 。 "
/n";
echo "counter1: " 。 $counter1() 。 "
/n";
echo "counter1: " 。 $counter1() 。 "
/n";
echo "counter2: " 。 $counter2() 。 "
/n";
echo "counter2: " 。 $counter2() 。 "
/n";
echo "counter2: " 。 $counter2() 。 "
/n";
echo "counter2: " 。 $counter2() 。 "
/n";
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/628696.html技術記事 PHP 5.3 では、匿名関数である、公開者による実行内関数の申請と量内での保存を許可する閉鎖パケット法が追加されました。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

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

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

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

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

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

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

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

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

See all articles