ホームページ >バックエンド開発 >PHPチュートリアル >PHP匿名関数
特定の名前なしで作成でき、PHP スクリプトの入力引数として使用できる関数は、匿名関数として知られています。これらの関数は Closure クラスを使用して実装されます。無名関数を変数に割り当てるプロセスは、他の代入構文と同じです。親スコープから使用言語構造に変数を渡すことで、子スコープの匿名関数が変数を継承できます。
広告 このカテゴリーの人気コース PHP 開発者 - 専門分野 | 8コースシリーズ | 3 つの模擬テスト無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
構文:
匿名関数には名前がありません:
function($arg1,$arg2,….,$argN){ //The definition for the anonymous function };
効果的な PHP コーディングを開発する際に匿名関数を使用することで達成できるさまざまな目的があります。匿名関数は、関数が使用されるさまざまなタイプのユースケースに基づいて、さまざまな機能を示します。
5 つの主要な使用例を以下に示します。
匿名関数を使用して変数に値を代入できます。他の代入操作と同じ構文に従います。
例:
以下のコード スニペットは、指定された入力値を出力値に割り当て、出力変数を使用して値を出力するために使用されます。
コード:
<?php $Var = function($value) //Anonymous function is used to assign value to variable $Var { //Anonymous function definition printf("The assigned value is: %s\r\n", $value); }; //Calling the anonymous function using the assigning variable $Var with a string value input $Var('A string value is assigned'); //Calling the anonymous function using the assigning variable $Var with a integer value input $Var(35); ?>
出力:
文字列型および整数型の指定された入力値は、以下に示すように匿名関数呼び出しを通じて出力されます。
匿名関数を定義する機能は、インライン コールバック関数の作成において重要な役割を果たします。
この場合、匿名関数を入力引数として別の関数に渡すことができます。
以下のコードは、コールバック関数 preg_replace_callback を定義するために書かれています。
入力パラメータの 1 つとして匿名関数を持ちます。
コード:
<?php //creating callback function using PHP anonymous function // preg_replace_callback is the calling function echo preg_replace_callback('~-([a-z])~', function ($input) { //Anonymous function definition return strtoupper($input[1]); }, 'This is an anonymous callback function!');//End of the definition of the callback function ?>
出力:
PHP スクリプトの実行時に、コールバック関数がトリガーされ、以下に示すように、匿名関数からの出力が出力ウィンドウに出力されます。
匿名関数は親スコープから変数を継承するために使用できます。
この使用例は、スーパー グローバル変数、$this 変数、または同じ名前を持つパラメーター変数をサポートしません。
例:
コード:
<?php $input_text = 'Initial message'; $outputVar = function () { //Anonymous function definition var_dump($input_text); }; $outputVar(); // Inherit the variable $input_text by value $outputVar = function () use ($input_text) { var_dump($input_text); }; $outputVar(); // Inherit the variable $input_text by-reference $outputVar = function () use (&$input_text) { var_dump($input_text); }; $outputVar(); // Modifying the variable value of parent scope from the function call $input_text = ' Next message'; $outputVar(); // Inserting regular argument along with parent scope variable $outputVar = function ($arg) use ($input_text) { var_dump($arg . ' ' . $input_text); }; $outputVar("Random message"); ?>
出力:
上記のコードの結果の出力は次のように生成されます。
PHP バージョン 5.4 以降では、任意のクラスを宣言した場合、そのクラスはデフォルトで匿名関数機能にバインドされます。これにより、変数「$this」がクラス内で定義された匿名関数のスコープ内で使用できるようになります。
例:
コード:
<?php class AnonymousClass { public function Classfunction() { return function() { var_dump($this); //Retrieves the dump information of class object using $this variable,once //it is created }; } } $Classobject = new AnonymousClass; $function = $Classobject->Classfunction(); $function(); ?>
出力:
クラス「AnonymousClass」からのオブジェクトのダンプ情報は、以下に示すように出力ウィンドウに出力されます。
オブジェクトの作成時に、同じオブジェクトのスコープからクロージャがインスタンス化されて登録されると、循環参照が作成され、オブジェクトの即時破壊が防止されます。静的匿名関数を適用すると、スクリプトが遅延を克服できるようになります。
通常の匿名関数と静的匿名関数の使用法の比較分析を以下の例で示します。
例:
ケース 1: 静的匿名関数を使用しない
コード:
<?php class TrialClass { private $AnonymousVar; public function __construct() { $this->AnonymousVar = function () { }; } public function __destruct() { echo "Destruction function is called"; } } new TrialClass; echo "After the object is being defined"; echo "\n"; ?>
出力:
ケース 2: 静的匿名関数を含む
コード:
<?php class TrialClass { private $AnonymousVar; public function __construct() { $this->closure = self::createClosure(); } public static function createClosure() { return function () { }; } public function __destruct() { echo "Destruction function is called"; } } new TrialClass; echo "\n"; echo "\n"; echo "After the object is being defined"; echo "\n"; echo "\n"; ?>
出力:
以上がPHP匿名関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。