Sistema de tipo
O PHP usa um sistema de tipo nominal com uma forte relação de subtipagem comportamental. A relação de subtipagem é verificada em tempo de compilação, enquanto a verificação de tipos é verificada dinamicamente em tempo de execução.
O sistema de tipos do PHP suporta vários tipos atômicos que podem ser compostos juntos para criar tipos mais complexos. Alguns desses tipos podem ser escritos como declarações de tipo
Tipos atômicos
Tipos atômicos são tipos internos que são fortemente integrados com a linguagem e não podem ser reproduzidos com tipos definidos pelo usuário.
A lista de tipos básicos é:
- Tipos integrados
- Valores literais
- Tipos definidos pelo usuário (geralmente chamados de tipos de classe)
- tipo callable
Tipos compostos
É possível combinar vários tipos atômicos em tipos compostos. O PHP permite que os tipos sejam combinados das seguintes maneiras:
- Interseção de tipos de classes (interfaces e nomes de classes).
- União de tipos.
Tipos de interseção
Um tipo de interseção aceita valores que satisfazem várias
declarações de tipo de classe, em vez de uma única.
Os tipos individuais que formam o tipo de interseção são unidos pelo símbolo
&
. Portanto, um tipo de interseção composto pelos tipos
T
, U
, e
V
será escrito como T&U&V
.
Tipos de união
Um tipo de união aceita valores de vários tipos diferentes,
em vez de um único.
Tipos individuais que formam o tipo de união são unidos pelo
|
símbolo. Portanto, um tipo de união composto
pelos tipos T
, U
, e
V
será escrito como T|U|V
.
Se um dos tipos for um tipo de interseção, ele precisa ser colocado entre
parênteses para que seja escrito em DNF:
T|(X&Y)
.
Alias de tipo
O PHP suporta dois aliases de tipo: mixed e
iterable que corresponde ao
tipo de união
de object|resource|array|string|float|int|bool|null
e Traversable|array
, respectivamente.
Note: O PHP não suporta aliases de tipo definidos pelo usuário.