Типизация аргументов и возвращаемого значения в PHP 8
В PHP 8 значительно улучшена система типизации аргументов и возвращаемых значений. Типизация позволяет сделать код более надёжным, читаемым и самодокументируемым. Ниже представлено подробное объяснение с примерами.
Что такое типизация в PHP
Типизация — это указание типов данных, которые функция принимает в качестве аргументов и/или возвращает. Примеры типов: int, string, array, bool, float, object, callable, iterable и другие.
Основные нововведения PHP 8
1. Объединённые типы (Union Types)
Позволяют функции принимать несколько типов данных:
function setId(int|string \$id): void {
echo "ID: \$id";
}
2. Тип mixed
Обозначает, что значение может быть любого допустимого типа:
function logValue(mixed \$value): void {
var_dump(\$value);
}
3. Тип static
Применяется в наследуемых классах. Гарантирует, что возвращается экземпляр текущего класса:
class A {
public function create(): static {
return new static();
}
}
4. Nullable-типы (null, ?)
Позволяют аргументу или возвращаемому значению быть либо заданного типа, либо null:
function getName(?string \$name): ?string {
return \$name;
}
5. Типизация возвращаемых значений
Теперь можно указать тип значения, которое возвращает функция:
function sum(int \$a, int \$b): int {
return \$a + \$b;
}
Если функция вернёт не int, возникнет ошибка типа.
6. Строгая типизация (strict_types)
Если активирована строгая типизация:
declare(strict_types=1);
function multiply(int \$x, int \$y): int {
return \$x * \$y;
}
multiply(5, '3'); // Ошибка типа, так как '3' — строка
Пример на практике:
class User {
public function setAge(int \$age): void {
\$this->age = \$age;
}
public function getProfile(): array {
return ['name' => 'John', 'age' => \$this->age];
}
}
Поддерживаемые типы в PHP 8
| Тип | Назначение |
int | Целое число |
float | Число с плавающей точкой |
string | Строка |
bool | Логический тип |
array | Массив |
object | Объект |
callable | Вызываемая сущность (функция или метод) |
iterable | Перебираемый тип |
mixed | Любой тип |
void | Функция ничего не возвращает |
never | Функция не возвращает управление (например, вызывает exit()) |
static | Возвращает экземпляр текущего класса |
имя_класса | Тип указан как конкретный класс или интерфейс |
Заключение
Типизация в PHP 8 — мощный инструмент, улучшающий читаемость, поддержку и надёжность кода. Она позволяет выявлять ошибки на ранней стадии и облегчает командную разработку.
При необходимости можно включить строгую типизацию (declare(strict_types=1);), чтобы PHP проверял типы максимально строго.