🤴

アロー関数の重要ポイントのまとめ(PHP)

2023/09/04に公開

アロー関数とは

無名関数を短く記述するための構文の一つ
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に慣れている人は少し注意ですね。

参照

https://qiita.com/tadsan/items/b2a37d1a7fed1b5b2cb1#php-74で追加されたアロー関数short-function

Discussion