PHP8から、or(または)の意味を持つパイプライン(|)を使って、型宣言を複数指定できるようになりました。
union型は複数宣言の型の名称で、'union' という型の記述はできません。
同じように特定の型を表さないmixedとはそこはちがう。
PHPでも型宣言の波が。
PHPは型宣言なしのデータ型の自由度に特長があるプログラミング言語ですが型宣言もできます。
メジャーアップデートされたPHP8では型の厳密化が進み、PHPでも型を意識するプログラミングが必要になってきています。
ただ、関数のパラメータと戻り値、クラスのプロパティだけが型宣言できて、通常の変数ではできません。
型宣言できるところ
型宣言できない
PHP7.4の型宣言できないエラー
PHP8.0の型宣言できないエラー
PHP公式ドキュメント
型の複数宣言は比較やコメントと同じ仕様
ここから本題ですが、型の複数宣言はパイプライン(|)を使って定義します。
この記述は比較でも使われるし、PHPDocの@param, @returnでおなじみなので間違えることはないでしょう。
PHPの標準関数では、関数内での処理が失敗するとfalseを返すものが数え切れないほどあるので、戻り値の型が複数あるのは当たり前です。
かといってmixed型にすると型の厳密化ができません。
型の複数宣言は、型の厳密化とPHP特有の型の自由度の中間的なものです。
ちなみにサンプルでは、3番目の配列を指定しているものはエラーになります。
実行結果
この仕様はPHP8.0で追加されたものなので、PHP7系以下では下位互換がありません。
シンタックスエラー(文法エラー)になります。
PHP7.4のエラー
PHP公式ドキュメント