Скидки до 81 000 руб и профессия в подарок!

Главная | Все статьи | Код

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

Время чтения статьи ~3 минуты
Как включить строгую типизацию в PHP и для чего ее использовать главное изображение

Рассказываем, что такое strict_types в PHP и как вообще работать со строгой типизацией.

Что делает строгая типизация

PHP исторически не был языком со строгой типизацией. Разработчики использовали переменные, в которые могли поместить практически что угодно. При этом во время своего развития PHP получал все больше и больше ограничений, связанных с типами.

Подсказки, которые в параметрах метода или свойствах класса указывают разработчику на тип данных, при правильном использовании бывают очень полезны. Они могут выявлять ошибки перед запуском кода и делают жизнь программистов легче. Вообще, объявление типа для класса появляется в языке только с версии PHP 5.

Обычно при передаче в функцию неожиданного типа PHP попытается автоматически привести значение к ожидаемому типу. Если была включена строгая типизация с помощью strict_types=1, PHP вместо приведения к другому типу данных просто выдаст исключение.

То есть использование declare(strict_types=1) сообщит PHP, что нужно выдавать TypeError, когда вы пытаетесь преобразовать примитивные значения.

Например, как работает PHP без включенной строгой типизации:

function dump(int $value): void  
{  
 var_dump($value);  
}  

dump('13.37');
dump(19.42);

Запуск этого кода приведет к следующему результату:

int(13)
int(19)

Функция dump из примера ожидает, что ей передадут целые числа. И хотя мы в одном из вызовов передаем ей строку, PHP самостоятельно преобразует ее в целое число и выдает результат. Конечно, IDE, которое использует программист, скорее всего, предупредит о преобразовании данных, но, тем не менее результат остается действующим PHP-кодом.

Как включить строгие типы

Включить строгую типизацию для примитивных значений очень просто — для этого нужно добавить команду declare(strict_types=1) в самое начало файла:

declare(strict_types=1)

function dump(int $value): void  
{  
 var_dump($value);  
}  

dump('13.37');
dump(19.42);

Запуск такого кода с объявлением о строгой типизации приведет к ошибке.

Fatal error: Uncaught TypeError: dump(): Argument #1 ($value) must be of type int, string given, called in /Users/rienvanvelzen/Desktop/demo.php on line 10 and defined in /Users/rienvanvelzen/Desktop/demo.php:5
Stack trace:
#0 /Users/rienvanvelzen/Desktop/demo.php(10): dump('13.37')
#1 {main}
  thrown in /Users/rienvanvelzen/Desktop/demo.php on line 5

Использование strict_type поможет разработчику выявить ошибки еще на ранней стадии, ограничивая PHP для автоматического переопределения примитивных типов данных.

Маленькое предостережение

Есть одна важная вещь в работе strict_types, которую нужно обязательно учитывать. Запрет на переопределение примитивных типов работает только в файле, где используется это объявление. Это означает, что когда разработчик в другом файле использует класс, который где-то у себя имеет объявление strict_type, это не спасет от переопределения примитивных данных в этом PHP-файле.

То есть строгая типизация применяется к вызовам функций, сделанным изнутри файла с включенной строгой типизацией, а не к функциям, объявленным в этом файле.

Эта статья является переводом материала «The way declare(strict_types=1) works in PHP» разработчика Marinus van Velzen в издании Dev.to.

Читайте также: Компиляция и интерпретация кода: что это такое и в чем разница

Аватар пользователя Svet Ivanov
Svet Ivanov 11 августа 2022
13
Рекомендуемые программы
профессия
Осваивайте разработку веб-страниц, оживляйте дизайн макетов, публикуйте сайты и приложения. Отслеживайте ошибки в интерфейсе и устраняйте их
10 месяцев
с нуля
Старт 21 ноября
профессия
Обучитесь разработке бэкенда сайтов и веб-приложений — серверной части, которая отвечает за логику и базы данных
10 месяцев
с нуля
Старт 21 ноября
профессия
Выполняйте ручное тестирование веб-приложений, находите ошибки в продукте. Узнайте все о тест-дизайне.
4 месяца
с нуля
Старт 21 ноября
профессия
Научитесь разработке веб-приложений, сайтов и программного обеспечения на языке Java, программируйте и используйте структуры данных
10 месяцев
с нуля
Старт 21 ноября
профессия
новый
Собирайте, анализируйте и интерпретируйте данные, улучшайте бизнес-процессы и продукт компании. Обучитесь работе с библиотеками Python
9 месяцев
с нуля
Старт 21 ноября
профессия
Занимайтесь созданием сайтов, веб-приложений, сервисов и их интеграцией с внутренними бизнес-системами на бекенд-языке PHP
10 месяцев
с нуля
Старт 21 ноября
профессия
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 21 ноября
профессия
Обучитесь разработке визуальной части сайта — фронтенда, а также реализации серверной — бэкенда. Освойте HTML, CSS, JavaScript
16 месяцев
с нуля
Старт 21 ноября
профессия
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 21 ноября
профессия
новый
Организовывайте процесс автоматизации тестирования на проекте, обучитесь языку программирования JavaScript, начните управлять процессом тестирования
8 месяцев
c опытом
Старт 21 ноября