PHPは変数の型に自由度があるプログラム言語のひとつですが、もともと型宣言ができるようになっていて、PHP8はデータ型の厳密化へ舵を切りました。
PHP8では型に合わないパラメータや戻り値はエラーになるほど。
そこで従来の型にこだわらないために用意されたのがmixed型です。
型にこだわらないことを明示するmixed型
PHPは変数の型宣言をしなくてもプログラミングできる言語ですが、型宣言も用意されていました。
PHP8では、データ型があいまいなのはバグが発生しやすいのでダメだろうということで、型の厳密化への仕様変更が多く行われています。
でもPHPを使う人には、その曖昧さが良いという人が多くいるので、そのために用意されたのがmixed型です。
mixedは型宣言にも使えるキーワードですが、じっさいは型を宣言していないのと同じ。
『型はなんでもいいよ。』と宣言しています。
mixed型の中身はすべての基本型を網羅したunion型
mixedは、型の名称で型宣言にも使うキーワードでもありますが、中身は複数の型宣言をするunion型です。
そのunion型に、すべての基本型が or で定義されています。
mixed型 | union型 |
---|---|
mixed | object|resource|array|string|int|float|bool|null |
NULL値すら許容されているのがいいですね。これは、PHP標準関数などで見られる、処理が失敗したときのNULL返しに対応しています。
union型ですべての型を許容するものを定義しようとするとこんなに長くなります。
面倒くさいし読みづらい。そのために用意されたのがmixed型です。
そろそろ型宣言なしのプログラミングはやめよう。
mixed型が用意されるということは、これからのPHPは型宣言をするのがメインになっていくことをアナウンスしているようなものです。
将来的には型宣言なしのものはシンタックスエラー(文法エラー)になる可能性もある。
ただし、型宣言は関数(とクラスのメソッド)のパラメータと戻り値、クラスのプロパティに限定されていて、通常の変数宣言ではまだできません。
この変数宣言で型宣言ができるようになったときは、いよいよPHPも型宣言をしなければならないプログラム言語になるときです。
まぁ、必ずそうなるというわけではなく、なるとしても遠い未来の話で、今その方向に少しずつ進んでるというだけですが。
だとしても、型のない型のmixedを用意するぐらいなので、これからは型宣言できるところは宣言をするように心がけましょう。
将来のプログラム修正のリスクを軽減できます。