【PHP】無名関数(クロージャ) / アロー関数書き方まとめ

PHP での無名関数と PHP のバージョン 7.4 から追加されたアロー関数の書き方についてまとめます。

無名関数とは

ドキュメントでは以下の様に解説されています。

無名関数はクロージャとも呼ばれ、 関数名を指定せずに関数を作成できるようにするものです。 callable パラメータとして使う際に便利ですが、用途はそれにとどまりません。

PHP ドキュメント

https://www.php.net/manual/ja/functions.anonymous.php

通常、関数を定義する際は関数名と処理の内容を定義しますが、無名関数とはその名の通り関数名を省略した形で関数が定義できる。
ということのようです。

関数の書き方

関数名と処理を書いて関数を定義すると以下のようになります。

/**
 * @return string
 */
public function getHelloWorld(): string
{
    return 'Hello World';
}

無名関数の場合

/**
 * @return string
 */
public function getHelloWorld(): string
{
    $function = function() {
        return 'HELLO WORLD';
    };

    return $function();
}

先ほど作成した関数の中に無名関数を作成しました。

$function = function() {
    return 'HELLO WORLD';
};

ここの部分ですね。このように関数を定義して、$function(); で呼び出す。
といったことができるということですね。
ちょっとした処理をまとめる時などに使用されます。

また、PHP7.4 からさらに省略したアロー関数で書くことができます。

/**
 * @return string
 */
public function getHelloWorld(): string
{
    $function = fn() => 'hello world';

    return $function();
}

上記は先ほどの無名関数と同様の動作をします。

引数を渡す

名前ありの関数と同じ様に引数を渡すこともできます。

/**
 * @return string
 */
public function getHelloWorld(): string
{
    $message = 'hello';
    $function = function ($message) {
        return $message . ' world';
    };

    return $function($message);
}

アロー関数の場合

/**
 * @return string
 */
public function getHelloWorld(): string
{
    $message = 'Hello';
    $function = fn($message) => $message . ' World';

    return $function($message);
}

以上です!ちょっとした処理を複数回使う様な時とは無名関数をしてスッキリさせていきたいですね!
最後まで読んでいただきありがとうございました!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA