🤴
アロー関数の重要ポイントのまとめ(PHP)
アロー関数とは
無名関数を短く記述するための構文の一つ。
PHP7.4で追加されたものです。
アロー関数のルール
主なルールを羅列します。
- function を fn に省略する
- use は書かなくてもスコープ外の変数を使える
- return は書けない
- 波括弧 {} は書けない
- 1行しか書けない
function を fn に省略する
引数リスト部は必ず function()ではなくfn() で括らねばいけない。
また、jsのようにfnを省略することもできません。
// ✖️ js的な書き方はダメ
$test1 = ($x, $y) => $x + $y;
$val1= $test1(1, 2);
// ✖️ function()はダメ
$test2 = function($x, $y) => $x + $y;
$val2= $test2(1, 2);
// ○ fn()で括る必要がある
$test3 = fn($x, $y) => $x + $y;
$val3 = $test3(1, 2);
use は書かなくてもスコープ外の変数を使える。自動でキャプチャされる
アロー関数では use () で変数の明示的なキャプチャが不要。
// ✖ ダメな例
$z = 100;
$test1 = fn($x, $y) use ($z) => $x + $y + $z;
$val1 = $test1(1, 2);
// ○ useはなくて良い
$z = 100;
$test2 = fn($x, $y) => $x + $y + $z;
$val2 = $test2(1, 2);
1行しか書けない。無理やり2行以上の処理はかけない
"=>"の右辺に書けるのは単一の式のみ。
// ✖ ダメな例
$z = 3;
$test = fn($x, $y) => $x + $y; $x + $y + $z;
アロー関数のネスト
アロー関数はネストできる。
$fn = fn($x) => fn($y) => $x + $y;
// ネストしたアロー関数の実行
$result = $fn(1)(2);
アロー関数の戻り値の型宣言
$fn = fn($x): int => $x;
$result = $fn(10);
無名関数との比較
アロー関数とそれと同じ処理の無名関数のサンプルを並べて比較。
// 無名関数
$test1 = function ($x, $y) {
return $x + $y + $z;
};
$val1 = $test1(1, 2);
// 同じものをアロー関数で書く
$test2 = fn($x, $y) => $x + $y;
$val2 = $test2(1, 2);
所感
JSにあるアロー関数と少し仕様が違うので、JSに慣れている人は少し注意ですね。
参照
Discussion