UNION型とは
型をunion
として宣言すると、ひとつではなく
複数の異なる型を値として受け入れることができます。
union型は、T1|T2|...
という文法を使って指定します。
今までのコード
PHP8以前はプロパティ、パラメーター、および戻り値の型に対して単一の型しか宣言できず
PHPDocで補完することしかできませんでした。
class Foo {
/**
* @var int|float $num
*/
private $num;
/**
* @var int|float $a
* @var int|float $b
* @return void
*/
public function test($a, $b): void
{
$this->num = $a * $b;
}
}
UNION型を使用
PHP8.0からはこのように書くことができます。
class Foo {
private int|float $num;
public function test(int|float $a, int|float $b): void
{
$this->num = $a * $b;
}
}
注意点
void型
void
はUnionTypesでは使用できません。
false疑似型
PHPでの多くはエラーを吐くときはfalseで返すことが多く、
失敗時にはnull
ではなくfalse
を返すように実装されています。
型指定はfalseでしましょう。
(例)int|false
string|false
null許容型
T1|T2|null
としてnullを指定できます。
null宣言には?T1|T2
などはできないので注意しましょう。
メリット
- すべてのパターンで型指定が可能となり、プログラムの品質が向上する。
- PHPStanなど静的解析でおこるエラーが解消しやすい。
- PHPDocの分量を減らすことができる。
デメリット
- あまり型に精通していない人が記載した場合、誤った型のケースを想定する場合がある。
参考