古庄親方の上級試験コラム#015 「言語リファレンス > 関数 > ユーザー定義関数 > 引数 その2」

目次

引数の型宣言

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

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

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