PHP - это язык с динамической типизацией. При определении функции не требуется объявлять типы параметров. Например:
Функция add() принимает два аргумента и возвращает их сумму. В этом примере мы передаём два целых числа и получаем результат в виде целого числа.
Если передать два числа с плавающей точкой, результатом будет сумма этих чисел с плавающей точкой:
Интереснее становится, если передать целое число и числовую строку, то функция вернёт целое число:
В этом случае PHP неявно преобразует строку '2' в целое число из-за оператора +.
Если преобразование строки в число невозможно, возникнет ошибка:
Для строгого контроля типов можно использовать подсказки типов.

Подсказки типов для параметров функций

Подсказки типов позволяют PHP проверять тип значения при вызове функции и выбрасывать исключение TypeError при несоответствии.
Чтобы добавить подсказку типа к параметру, укажите тип перед именем переменной:
В PHP 5 поддерживаются типы arraycallable и имя класса. В PHP 7 и новее доступны скалярные типы: boolfloatintstring.
Пример функции, принимающей только целые числа:
Если передать число с плавающей точкой, оно будет неявно приведено к целому:
PHP выдаст предупреждение о потере точности при таком преобразовании.
Для строгой проверки типов используйте объявление строгой типизации.

Подсказки типов для возвращаемых значений функций

Чтобы указать тип возвращаемого значения, добавьте его после заголовка функции:
Пример:
С PHP 7.0 для функций, не возвращающих значение, используется тип void:

Объединённые (union) типы

С PHP 8.0 можно указывать несколько возможных типов возвращаемого значения через union-типы:
В этом примере функция возвращает либо целое число, либо число с плавающей точкой, в зависимости от типов аргументов.

Тип mixed

Если функция может возвращать значения разных типов, используйте тип mixed (доступен с PHP 8.0). Он эквивалентен объединению: object|resource|array|string|int|float|bool|null.
Пример функции:

Nullable-типы

Если требуется разрешить передачу или возврат значения null, используйте nullable-типы (с PHP 7.1), добавляя префикс ? к названию типа.
Пример:
Тип mixed уже включает null, поэтому использовать ?mixed нельзя - это вызовет ошибку.

Итог

  • Используйте подсказки типов для параметров и возвращаемых значений функций.
  • Для функций без возвращаемого значения используйте тип void.
  • Для нескольких возможных типов используйте union-типы или тип mixed.
  • Для разрешения значения null используйте nullable-типы с префиксом ?.