Как включить строгую типизацию в PHP и для чего ее использовать

Рассказываем, что такое strict_types
в PHP и как вообще работать со строгой типизацией.
Содержание
Что делает строгая типизация
PHP исторически не был языком со строгой типизацией. Разработчики использовали переменные, в которые могли поместить практически что угодно. При этом во время своего развития PHP получал все больше и больше ограничений, связанных с типами.
Подсказки, которые в параметрах метода или свойствах класса указывают разработчику на тип данных, при правильном использовании бывают очень полезны. Они могут выявлять ошибки перед запуском кода и делают жизнь программистов легче. Вообще, объявление типа для класса появляется в языке только с версии PHP 5.
Обычно при передаче в функцию неожиданного типа PHP попытается автоматически привести значение к ожидаемому типу. Если была включена строгая типизация с помощью strict_types=1
, PHP вместо приведения к другому типу данных просто выдаст исключение.
То есть использование declare(strict_types=1)
сообщит PHP, что нужно выдавать TypeError
, когда вы пытаетесь преобразовать примитивные значения.
Например, как работает PHP без включенной строгой типизации:
Запуск этого кода приведет к следующему результату:
Функция dump
из примера ожидает, что ей передадут целые числа. И хотя мы в одном из вызовов передаем ей строку, PHP самостоятельно преобразует ее в целое число и выдает результат. Конечно, IDE, которое использует программист, скорее всего, предупредит о преобразовании данных, но, тем не менее результат остается действующим PHP-кодом.
Как включить строгие типы
Включить строгую типизацию для примитивных значений очень просто — для этого нужно добавить команду declare(strict_types=1)
в самое начало файла:
Запуск такого кода с объявлением о строгой типизации приведет к ошибке.
Использование strict_type
поможет разработчику выявить ошибки еще на ранней стадии, ограничивая PHP для автоматического переопределения примитивных типов данных.
Маленькое предостережение
Есть одна важная вещь в работе strict_types
, которую нужно обязательно учитывать. Запрет на переопределение примитивных типов работает только в файле, где используется это объявление. Это означает, что когда разработчик в другом файле использует класс, который где-то у себя имеет объявление strict_type
, это не спасет от переопределения примитивных данных в этом PHP-файле.
То есть строгая типизация применяется к вызовам функций, сделанным изнутри файла с включенной строгой типизацией, а не к функциям, объявленным в этом файле.
Эта статья является переводом материала «The way declare(strict_types=1) works in PHP» разработчика Marinus van Velzen в издании Dev.to.
Читайте также:
Компиляция и интерпретация кода: что это такое и в чем разница
Svet Ivanov
3 года назад