
2024-05-10
Статическая строгая типизация в php
2023-07-20
Объявления типов могут использоваться для аргументов функций, возвращаемых значений и, начиная с PHP 7.4.0, для свойств класса. Они используются во время исполнения для проверки, что значение имеет точно тот тип, который для них указан. В противном случае будет выброшено исключение.
Все типы, которые поддерживает 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 с каждой новой версией всё больше идет к тому, чтобы строгая типизация становилась все более строгой. Поэтому есть смысл сразу изучить этот несложный аспект языка и применять его не дожидаясь дня, когда это станет обязательно-принудительным в очередной новой версии.
Ура! Я наконец-то дописал статью как собирать собственные бандлы на Symfony 6!!!
Статья про EasyAdmin всё ещё в процессе )))
Не, ну мне же надо на чем-то тестировать твиттер локальный...
Я тут еще много полезного буду выкладывать, так что заходите обязательно почитать.
Сайтик пока что в разработке - это далеко не окончательная версия - по сути это то что удалось слепить за 8 часов.
Комментарии