Type System

Оновлено: 12.05.2023

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

Система типів PHP підтримує різні базові типи, які можна комбінувати для створення більш складних типів. Деякі з цих типів можуть бути записані як оголошення типів.

Деякі базові типи є вбудованими типами, які тісно інтегровані з мовою і не можуть бути відтворені за допомогою типів, визначених користувачем.

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

  • Вбудовані типи
    • тип null
    • Скалярні типи:
      • тип bool
      • тип int
      • тип float
      • тип string
      • тип масиву
      • тип об'єкта
      • тип ресурсу
      • тип never
      • тип void
    • Відносні типи класів: self, parent та static
  • Літеральні типи
    • false
    • true
  • Типи, визначені користувачем (зазвичай звані типами класів)
    • Інтерфейси
    • Класи
    • Перерахування
  • тип callable

Існує можливість комбінувати прості типи у складені типи. PHP дозволяє комбінувати типи наступними способами:

Перетин класів-типів (інтерфейсів та імен класів). Об'єднання типів.

Тип перетину приймає значення, які задовольняють не одному, а декільком оголошенням типів класів. Окремі типи, що утворюють тип перетину, об'єднуються символом &. Таким чином, тип перетину, що складається з типів T, U та V, буде записано як T&U&V.

Об'єднаний тип приймає значення декількох різних типів, а не одного. Окремі типи, які утворюють об'єднаний тип, з'єднуються символом |. Таким чином, об'єднаний тип, що складається з типів T, U та V, буде записано як T|U|V. Якщо один з типів є типом перетину, його потрібно взяти у дужки, щоб записати у DNF: T|(X&Y).

PHP підтримує два типи псевдонімів: змішаний та ітерабельний, що відповідає типу об'єднання об'єкт|ресурс|масив|строка|флоат|int|bool|null та Traversable|масив відповідно.

Зауваження: PHP не підтримує псевдоніми типів, визначені користувачем.