古庄親方の上級試験コラム#017 「言語リファレンス > 関数 > ユーザー定義関数 > 戻り値 | 無名関数」

目次

戻り値

https://www.php.net/manual/ja/functions.returning-values.php

関数は、return文によって値を返すことができます。
あらゆる型を返す事ができますが、返す値は「1つだけ」になります。
リファレンスを返す事もできます。

戻り値の型宣言

https://www.php.net/manual/ja/language.types.declarations.php

戻り値も、型宣言をする事ができます。
引数と同様の型が宣言できますが、それ以外に「戻り値にのみ指定できる型」がいくつか存在します。

void型がサポートされています。これは「値を返さない」事を意味します。

static型がサポートされました。遅延静的束縛に出てくるstaticと同様で「静的継承のコンテキストで呼び出し元のクラス」が指定されます。

無名関数

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

関数名を指定せずに関数を作成する「無名関数(クロージャ)」があります。
親のスコープから変数を引き継ぐために use も用意されています。 use は値渡しになるので、リファレンスで渡したい場合には&を付ける必要があります。

クラスの中で無名関数を宣言すると、クラスにバインドされます。そのため、無目関数内で $this が使えるようになります。
それを避けたい時は「static な無名関数」を作成する事もできます。

昔は、create_function()関数というものがあり、これを使って「匿名関数(ラムダ)」というものを作る事もできました(実装は色々と異なりますが、使い方は無名関数に似ています)。
しかしPHP 8.0.0で削除されたので、古いコードで見る事くらいしかないでしょう(試験範囲対象外)。

アロー関数

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

無名関数を完結に書く文法として、アロー関数があります。
親のスコープで使える変数が常に自動で使えるので、覚えておきましょう。
アロー関数は、ネストさせることもできます。

第一級callableを生成する記法(試験範囲対象外)

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

PHP 8.1.0以降、 callableからClosureを生成することが可能になりました。

このコラムに関連するコードはこちらになります
https://github.com/php-engineer-examination/php8_column_expert/blob/main/src/017.php

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次