Ответ
Начиная с PHP 7, можно и нужно указывать тип возвращаемого значения (return type declaration) после списка аргументов, используя двоеточие (:). Это улучшает читаемость, обеспечивает безопасность типов на этапе выполнения и помогает IDE с автодополнением.
Синтаксис и основные типы:
// 1. Скалярные типы (int, float, string, bool)
function calculateTotal(int $quantity, float $price): float {
return $quantity * $price;
}
// 2. Возврат объектов/интерфейсов
function createUserService(): UserServiceInterface {
return new UserService();
}
// 3. Возврат массива (array) или итерируемого объекта (iterable)
function getConfig(): array {
return ['cache' => true, 'debug' => false];
}
// 4. Возврат nullable-типа (может вернуть указанный тип ИЛИ null)
function findUserById(int $id): ?User { // Синтаксис '?Type'
return User::find($id); // Вернёт User или null
}
// 5. Функция, которая ничего не возвращает (void)
function logMessage(string $message): void {
file_put_contents('app.log', $message, FILE_APPEND);
// Не требуется return
}
// 6. Функция, которая никогда не возвращает управление (never) - PHP 8.1+
function redirectAndExit(string $url): never {
header('Location: ' . $url);
exit(); // Или throw new Exception()
// Код после exit() никогда не выполнится
}
Union Types (Объединённые типы) - PHP 8.0+
Можно указать, что функция возвращает значение одного из нескольких типов.
function parseInput(string $input): int|string|bool {
if (is_numeric($input)) {
return (int) $input; // Возвращает int
}
if ($input === 'true' || $input === 'false') {
return $input === 'true'; // Возвращает bool
}
return $input; // Возвращает string
}
Практическое применение и ошибки:
Если функция возвращает значение, не соответствующее заявленному типу, будет выброшена исключение TypeError (в режиме strict_types=1) или произойдёт попытка неявного приведения типа.
declare(strict_types=1); // Строгая проверка типов
function getAge(): int {
return '25 years'; // TypeError: Return value must be of type int, string returned
}
function getAgeWithoutStrict(): int {
return '25'; // Без strict_types произойдёт неявное приведение к int, вернётся 25
}
Итог: Указание типов возврата — это стандарт современного PHP-кода. Это самодокументирующаяся практика, которая предотвращает множество ошибок на раннем этапе.