PHP匿名関数

王林
王林オリジナル
2024-08-29 12:47:23578ブラウズ

特定の名前なしで作成でき、PHP スクリプトの入力引数として使用できる関数は、匿名関数として知られています。これらの関数は Closure クラスを使用して実装されます。無名関数を変数に割り当てるプロセスは、他の代入構文と同じです。親スコープから使用言語構造に変数を渡すことで、子スコープの匿名関数が変数を継承できます。

広告 このカテゴリーの人気コース PHP 開発者 - 専門分野 | 8コースシリーズ | 3 つの模擬テスト

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

構文:

匿名関数には名前がありません:

function($arg1,$arg2,….,$argN){
//The definition for the anonymous function
};

さまざまなタイプのユースケース

効果的な PHP コーディングを開発する際に匿名関数を使用することで達成できるさまざまな目的があります。匿名関数は、関数が使用されるさまざまなタイプのユースケースに基づいて、さまざまな機能を示します。

5 つの主要な使用例を以下に示します。

1.使用例 1

匿名関数を使用して変数に値を代入できます。他の代入操作と同じ構文に従います。

:

以下のコード スニペットは、指定された入力値を出力値に割り当て、出力変数を使用して値を出力するために使用されます。

コード:

<?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);
?>

出力:

文字列型および整数型の指定された入力値は、以下に示すように匿名関数呼び出しを通じて出力されます。

PHP匿名関数

2.使用例 2

匿名関数を定義する機能は、インライン コールバック関数の作成において重要な役割を果たします。

この場合、匿名関数を入力引数として別の関数に渡すことができます。

以下のコードは、コールバック関数 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 スクリプトの実行時に、コールバック関数がトリガーされ、以下に示すように、匿名関数からの出力が出力ウィンドウに出力されます。

PHP匿名関数

3.使用例 3

匿名関数は親スコープから変数を継承するために使用できます。

この使用例は、スーパー グローバル変数、$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匿名関数

4.使用例 4

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」からのオブジェクトのダンプ情報は、以下に示すように出力ウィンドウに出力されます。

PHP匿名関数

5.使用例 5

オブジェクトの作成時に、同じオブジェクトのスコープからクロージャがインスタンス化されて登録されると、循環参照が作成され、オブジェクトの即時破壊が防止されます。静的匿名関数を適用すると、スクリプトが遅延を克服できるようになります。

通常の匿名関数と静的匿名関数の使用法の比較分析を以下の例で示します。

例:

ケース 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";
?>

出力:

PHP匿名関数

ケース 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 バージョン 5.4 以降のデフォルトの動作です。これは静的匿名関数を実装することで禁止できます。
  • 一度だけ使用する関数の定義に使用できるため、パフォーマンスが向上します。匿名関数は、その関数から実行する必要があるジョブでのみ使用でき、コードの残りの部分では使用できません。
  • 匿名関数を使用して変数に値を代入すると、PHP は式を Closure 内部クラス インスタンスに自動的に変換します。

以上がPHP匿名関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHPの日付関数次の記事:PHPの日付関数