Система типов

В PHP используется система номинальных типов с сильным поведенческим отношением подтипизации. Отношение подтипизации проверяется во время компиляции, в то время как верификация типов проверяется динамически во время выполнения.

Система типов PHP поддерживает различные атомарные типы, которые могут быть объединены вместе для создания более сложных типов. Некоторые из этих типов могут быть записаны как объявление типов.

Атомарные типы

Некоторые атомарные типы являются встроенными типами, которые тесно интегрированы с языком и не могут быть воспроизведены с помощью типов, определённых пользователем.

Список базовых типов:

Составные типы

Возможно объединение нескольких атомарных типов в составные типы. PHP позволяет объединять типы следующими способами:

  • Пересечение классов-типов (интерфейсов и имён классов).
  • Объединение типов.

Пересечение типов

Пересечение типов принимает значения, удовлетворяющие не одному, а нескольким объявлениям типов классов. Отдельные типы, образующие пересечение типов, соединяются символом &. Поэтому пересечение типов, состоящее из типов T, U и V, будет записано как T&U&V.

Объединение типов

Объединение типов принимает значения нескольких различных типов, а не одного. Отдельные типы, образующие объединение типов, соединяются символом |. Поэтому объединение типов, состоящее из типов T, U и V, будет записано как T|U|V. Если один из типов является пересечением типов, то для записи в DNF его нужно заключить в скобки: T|(X&Y).

Псевдонимы типов

PHP поддерживает два псевдонима типов: mixed и iterable, которые соответствуют объединению типов object|resource|array|string|float|int|bool|null и Traversable|array соответственно.

Замечание: PHP не поддерживает определяемые пользователем псевдонимы типов.