引数の型宣言
https://www.php.net/manual/ja/language.types.declarations.php
引数に対して「型宣言(型の指定)」ができるようになりました。
「型宣言と異なる」場合、「変換可能、かつ declare(strict_types=1);
が宣言されていない」時は暗黙の変換が行われ、「変換不可能、または declare(strict_types=1);
が宣言されている」時は TypeError がスローされます。
バージョンによってサポートの追加があるので、実際に使う時は確認をしたほうがよいでしょう。
PHP 8.0.0まで(試験範囲)で確認をしていきましょう。
- 「PHPがサポートしている単一の型のうち、resource型以外(null, bool,int,float,string,array,object)」の型宣言をすることができます。
- ただしnull型を単独で扱う事は、(PHP 8.1までは)できません
- 型の前に?を付ける事で、nullable(nullを許容する)型宣言をすることができます。
- callable を使う事で「関数として呼び出せる(コールバック関数)」値を指定する事ができます。
- union型によって「複数の型のうちいずれか」を指定する事ができます。また、union型の一部として false型(bool falseのみが許された型)がサポートされています。
- iterable型によって「foreachによって繰り返しができ、ジェネレータ内でyield fromできる」値を指定する事ができます。
- mixed型がサポートされました。これは「あらゆる値を受け取る」となり、
object|resource|array|string|float|int|bool|null
と同等です。
PHP 8.1.0以降(試験対象範囲外)の内容はコード側は割愛しますが、以下が追加になっています。
8.2.0 DNF 型のサポートが追加されました。
8.2.0 リテラル型 true のサポートが追加されました。
8.2.0 null と false 型が、独立した型として使えるようになりました。
8.1.0 交差型のサポートが追加されました。
8.1.0 戻り値を void とした関数からリファレンスを返すことは、 推奨されなくなりました。
8.1.0 戻り値にのみ指定できる型として、 never 型のサポートが追加されました。
このコラムに関連するコードはこちらになります
https://github.com/php-engineer-examination/php8_column_expert/blob/main/src/015.php
https://github.com/php-engineer-examination/php8_column_expert/blob/main/src/015_NotStrict.php