PHPでは、変数には型があり、関数のパラメータや戻り値、クラスのプロパティに型の指定をする事ができます。 https://www.php.net/manual/ja/language.types.type-system.php
関数/メソッドの引数や戻り値に使える型として、今まで紹介したもの以外に以下もあります。
なおPHP7以下を使っている場合、以下のいくつかが「使えない」ので注意しましょう。
https://www.php.net/manual/ja/language.types.declarations.php に変更履歴があるので、参考にするとよいでしょう。
Callable型は「ユーザーが定義するコールバック関数(メソッド)」を引数の型として指定します。
「stringの関数名」のほかに「クラス名とメソッド名(string)の配列」「クラスオブジェクトとメソッド名(string)の配列」「”クラス名::メソッド名”のフォーマットの文字列」「無名関数やアロー関数(詳しい説明は別項で改めて行います)」「__invoke()を実装したクラスのオブジェクト」「三点リーダー/三点ドットを使った無名関数の生成(マニュアルの記載的には「第一級callableの生成」): PHP8.1以降」など、様々な方法があります。
void型は「戻り値がない」事を指定する型です。
複合型(union型と交差型)は、引数や戻り値で「いくつかの型を許容したい」「すべての条件を満たす型だけを許容したい」ケースの時に使います。
交差型は「型のand」ように動き、すべての条件を満たす型のみを受け入れます。交差型はPHP8.1以降の機能なので、試験範囲の対象外です。
union型は「型のor」のように動き、「指定された型のいずれかが満たされれば」受け入れます。
型のエイリアスとして、以下の「Iterable型」「とMixed型」があります。
Iterable型は「foreachで扱う事ができる」変数型です。具体的には、「配列(array)」または「Traversableインタフェースを継承しているクラス(Traversable)」のどちらかが期待されます。
書式としては「array|Traversable」となります。
Mixed型は「あらゆる型を受け入れる」型です。
書式としては「object|resource|array|string|float|int|bool|null」となります。
never型は「関数がreturnしない」事を指し示す型です。PHP8.1以降で使えるので、試験範囲の対象外です。
このコラムに関連するコードはこちらになります( https://github.com/php-engineer-examination/php8_column_expert/blob/main/src/005.php )。
第一級callableの生成、交差型、never型については、PHP 8.0環境だとエラーになるので、コードを分けています( https://github.com/php-engineer-examination/php8_column_expert/blob/main/src/005_NotTested.php )。