Коротко: строгая типизация в PHP (type hints для аргументов, возвращаемых значений и свойств с 7.4) проверяет типы в рантайме и делает код надёжнее — осваивать стоит сразу.
Объявления типов (строгая типизация) в PHP — это указание типов для аргументов функций, возвращаемых значений и, начиная с PHP 7.4, для свойств класса. Во время исполнения PHP проверяет, что значение точно соответствует объявленному типу, иначе бросает исключение. Разберём, зачем это нужно и почему это хорошо.
В объявлениях типов можно использовать все поддерживаемые PHP типы, кроме ресурсов (resource). Детали есть в официальной документации, а мы разберём смысл.
В простейшем виде типизация функции выглядит так:
<?php
class Test
{
/** @var int $currentChunk */
private int $currentChunk = 1;
/**
* @param Filter $filter
* @param int $limit
* @param int $offset
* @return array
*/
public function getSomeDataFromDatabase(Filter $filter, int $limit, int $offset): array
{
return [];
}
}
Здесь на вход функции подаётся класс Filter и два параметра типа int, а на выходе возвращается массив.
Зачем нужна строгая типизация?
В первую очередь — чтобы корректно выстраивать архитектуру кода. Типизация заставляет продумывать, как работает тот или иной кусок, а не надеяться, что вы всегда будете помнить, что происходит внутри функции. Заодно она улучшает подсказки IDE и помогает другим программистам понимать код без детального погружения в реализацию.
Сравним две ситуации на примере класса Facade с методами для работы с неким модулем. Первая: методы объявлены, но типы входных параметров не указаны — разработчику приходится лезть внутрь метода, чтобы понять, в каком виде передавать данные, иначе велик риск ошибиться и ловить 500-е. Вторая: код строго типизирован, указаны все входные и выходные типы — лезть «под капот» уже не нужно, сразу понятно, что передать и что ожидать в ответ. Профит.
И в заключение: PHP с каждой версией делает типизацию всё строже. Поэтому есть смысл освоить этот несложный аспект сразу и применять, не дожидаясь дня, когда он станет обязательным. Если хотите навести порядок в типизации и архитектуре проекта — помогу на консультации.


Комментарии