Язык PHP использует систему номинальных типов с сильным отношением поведенческого подтипирования. PHP проверяет отношение подтипов во время компиляции, тогда как контроль типов язык выполняет динамически во время выполнения.
Система типов данных в PHP поддерживает атомарные типы, которые разрешено объединять, чтобы создавать сложные типы. Часть этих типов допустимо записывать в объявлениях типов.
Отдельные атомарные типы — встроенные типы, которые тесно интегрированы с языком и которые невозможно воспроизвести пользовательским определением типов.
Список базовых типов:
PHP считает значение скалярным, если значение принадлежит типу int, float, string или bool.
Язык разрешает определять пользовательские типы данных через
интерфейсы,
классы
и перечисления.
PHP рассматривает пользовательские типы как типы классов.
Приведём пример. Язык разрешает определить класс с названием Elephant
,
затем создать объект с типом Elephant
,
а потом определить функцию с параметром, который ждёт аргумент с типом Elephant
.
Возможно объединение нескольких атомарных типов в составные типы. 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 не поддерживает определяемые пользователем псевдонимы типов.