PHP

PHPのタイプヒンティングメモ

PHP7になってからタイプヒンティング(型宣言)が増えたのもあって、いつこれが追加されたのか?といったところがよくわからなくなってきたのでメモしました。

関数の引数に書けるタイプヒンティング

ドキュメントに書いてあるものをほぼそのまま持ってきました。

利用可能になるバージョン
クラス/インターフェース名 5.0.0
self 5.0.0
array 5.1.0
callable 5.4.0
bool 7.0.0
float 7.0.0
int 7.0.0
string 7.0.0
iterable 7.1.0
object 7.2.0

戻り値に書けるタイプヒンティング(7以降

php7から戻り値にもタイプヒンティングが記載できるようになりました。
基本的には関数に書けるものと同じです。

function test(): int

また、php7.1からはvoid型もサポートします。

function test(): void

強い型付けを要求する(7以降

デフォルトの場合は、緩い型付けが許容されるので可能な限りはその型に変換されるようになっています。(スカラー型のみ)

強い型付けを実現するには、declare(strict_types=1);を書きます。
もし、型があってない場合はTypeErrorをスローします。

タイプヒンティングしてるけどnullableにもしたい

PHP7.1未満のバージョンの場合は、引数のデフォルト値にnullを指定すると動作します。(厳密には似たような動きをするだけです)

function test(int $number = null)

PHP7.1からは型の前に?をつけます。なお、これは戻り値の型にも指定できます。

function test(?int $number)

7.1から導入されたiterable

iterableは7.1から導入されている疑似型です。
arrayや、Traversable(foreachで回せる)を実装したものであれば受け取ることが出来ます。

おまけ

7.1からはクラス定数にもアクセス修飾子を指定可能になっている

いままではクラス定数にアクセス修飾子(publicなど)をつけることは出来ませんでしたが、7.1から可能になっています。

class Sample {
    public const $test;