Union Types

An annotation of the form Type1|Type2|Type3 is a Union Type. Type1, Type2 and Type3 are all acceptable possible types of that union type.

Type1, Type2 and Type3 are each atomic types.

Union types can be generated in a number of different ways, for example in ternary expressions:

<?php
$rabbit = rand(0, 10) === 4 ? 'rabbit' : ['rabbit'];

$rabbit will be either a string or an array. We can represent that idea with Union Types – so $rabbit is typed as string|array. Union types represent all the possible types a given variable can have.

PHP builtin functions also have union-type returns - strpos can return false in some situations, int in others. We represent that union type with int|false.