戻り値
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