ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

PHP8, mixed型, すべての型を網羅するオールラウンダー。

php
イラストダウンロードサイト【イラストAC】
の画像をもとに加工しています。

PHPは変数の型に自由度があるプログラム言語のひとつですが、もともと型宣言ができるようになっていて、PHP8はデータ型の厳密化へ舵を切りました。

PHP8では型に合わないパラメータや戻り値はエラーになるほど。

そこで従来の型にこだわらないために用意されたのがmixed型です。

型にこだわらないことを明示するmixed型

PHPは変数の型宣言をしなくてもプログラミングできる言語ですが、型宣言も用意されていました。

PHP8では、データ型があいまいなのはバグが発生しやすいのでダメだろうということで、型の厳密化への仕様変更が多く行われています。

でもPHPを使う人には、その曖昧さが良いという人が多くいるので、そのために用意されたのがmixed型です。

mixedは型宣言にも使えるキーワードですが、じっさいは型を宣言していないのと同じ。

『型はなんでもいいよ。』と宣言しています。

mixed型の中身はすべての基本型を網羅したunion型

mixedは、型の名称で型宣言にも使うキーワードでもありますが、中身は複数の型宣言をするunion型です。

そのunion型に、すべての基本型が or で定義されています。

mixed型union型
mixedobject|resource|array|string|int|float|bool|null
mixedの中身はすべての型を網羅したunion型

NULL値すら許容されているのがいいですね。これは、PHP標準関数などで見られる、処理が失敗したときのNULL返しに対応しています。

union型ですべての型を許容するものを定義しようとするとこんなに長くなります。

面倒くさいし読みづらい。そのために用意されたのがmixed型です。

そろそろ型宣言なしのプログラミングはやめよう。

mixed型が用意されるということは、これからのPHPは型宣言をするのがメインになっていくことをアナウンスしているようなものです。

将来的には型宣言なしのものはシンタックスエラー(文法エラー)になる可能性もある。

ただし、型宣言は関数(とクラスのメソッド)のパラメータと戻り値、クラスのプロパティに限定されていて、通常の変数宣言ではまだできません。

この変数宣言で型宣言ができるようになったときは、いよいよPHPも型宣言をしなければならないプログラム言語になるときです。

まぁ、必ずそうなるというわけではなく、なるとしても遠い未来の話で、今その方向に少しずつ進んでるというだけですが。

だとしても、型のない型のmixedを用意するぐらいなので、これからは型宣言できるところは宣言をするように心がけましょう。

将来のプログラム修正のリスクを軽減できます。

前の投稿
PHP8, union型, 変数や関数の型を複数宣言できる。
PHP8, 戻り値の型で使う static型ってなんだ? ネーミングがややこしくない?
次の投稿

コメントを残す