PHPでアロー関数を使う方法!fnで定義する

PHP

PHPのアロー関数についてまとめました。
アロー関数はPHP7.4で追加されたとのことで、簡潔に無名関数を書くことができます。

公式ドキュメントはこちら(https://www.php.net/manual/ja/functions.arrow.php)です。
掲載しているソースコードはPHPのバージョン8.2.6で動作確認しました。

PHPでアロー関数を使う

PHPのアロー関数を使うことで、簡単に無名関数を書くことができます。
下記のようにfnを使って、定義することができます。

$plusText = fn ($value) => $value . "はおいしいです。";

echo $plusText('カレー'); // カレーはおいしいです。
echo $plusText('寿司');  // 寿司はおいしいです。
echo $plusText('バーガー'); // バーガーはおいしいです。

fnを使って、無名関数を作って$plusTextに代入しています。
fnを書いた後に関数の引数を書いて、「=>」の後に1行で処理を書きます。

今回作った関数は渡した文字列と、固定文字列を結合して返すものです。
引数を渡して、実行すると渡した引数の文字列が結合されて、出力されることが確認できます。

アロー関数でuseは必要?

アロー関数を使うとuseを使わなくても、関数の外の変数を参照することができますが、処理は1行でしか書くことができません。
例えば、下記のように関数外の変数を参照して処理することができます。

$total = 150;

$addValue = fn ($number1, $number2) => $number1 + $number2 + $total;

echo $addValue(10, 20); // 180

fnでアロー関数を作って、2つの引数の値を足して、それに外部変数の$totalを足して返しています。

結果を確認すると「10」と「20」を渡して、「30」ですが、$total(150)も足して「180」になりました。
外部変数の値も参照できていることが確認できました。

ネストしたアロー関数

あまり使う機会がないかもしれませんが、アロー関数をネストすることもできます。
3つの関数をネストして、書きました。

$addValue = fn ($number1) => fn ($number2) => fn ($number3) => $number1 + $number2 + $number3;

echo $addValue(4)(77)(35); // 116

それぞれ、数値を渡して、引数が足されて返ってくることが確認できました。

外部変数の値は変更できない

アロー関数で外部の変数を参照すると、値渡しのようになるようで、外部変数の値の変更はできません。
例えば、下記のようなコードです。

$total = 115;
$addTotal = fn ($number) => $total = $total + $number; 

$addTotal(100);

echo $total; // 115

$total変数に「115」を代入して、次のアロー関数の内部で代入していますが、$total変数の値は変わりません。
アロー関数を呼び出して、「100」を渡しましたが、$total変数を出力すると「115」のままになっています。

おわりに

今回はPHPのアロー関数について確認してみました。
普通に関数を定義するよりも、簡単に作って使っていくことができました。

筆者はあまり活用できていませんが、簡単な処理を複数回やるような時に使うと良さそうです。

コメント

タイトルとURLをコピーしました