0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PHP8.0のUNION型で型指定の幅が広がった

Last updated at Posted at 2022-06-09

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の分量を減らすことができる。

デメリット

  • あまり型に精通していない人が記載した場合、誤った型のケースを想定する場合がある。

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?