投稿

ラベル(無名関数)が付いた投稿を表示しています

[PHP] 無名関数とアロー関数について

無名関数はその名の通り、名前を持たない関数で、クロージャーとも呼ばれます。 無名関数 構文 function(引数) { 処理; } [実装例]無名関数を変数に入れて使う コード $func = function(string $value) { print "Hello {$value}\n"; }; $func("Test"); このコードの正しく実行でき、結果は以下のようになります。 実行結果 $ php test_anonymous_function.php Hello Test [実装例]呼び出し元スコープの変数を使う コード(誤) 無名関数の呼び出し元のスコープに定義されている変数は、無名関数内でそのまま扱うことはできません。例えば以下のコードは実行時にエラーになります。 $name = "Hoge"; $func = function(string $value) { print "Hello {$value} {$name}\n"; }; $func("Test"); 実行結果(誤) $ php test_anonymous_function.php Warning: Undefined variable $name in ./test_anonymous_function.php on line 5 Hello Test コード(正) 呼び出し元スコープの変数を無名関数内で利用するには、function定義時にuseキーワードを使用して無名関数に渡してやります。 $name = "Hoge"; $func = function(string $value) use ($name) { print "Hello {$value} {$name}\n"; }; $func("Test"); 無名関数内で呼び出し元スコープの変数を使うには、useキーワードに使用する変数を指定する 実行結果(正) $ php test_anonymous_function.php Hello Test Ho