Strict Types в PHP: руководство по строгой типизации

Директива declare(strict_types=1) — это мощный инструмент в PHP, который обеспечивает строгую проверку типов данных. В этой статье мы подробно разберём, как правильно использовать strict_types, какие преимущества это даёт и как избежать распространённых ошибок.

Что такое strict_types?

strict_types=1 — это директива, которая включает строгую проверку типов для скалярных значений (int, float, string, bool) в пределах файла, где она объявлена.

<?php
declare(strict_types=1);

function sum(int $a, int $b): int {
    return $a + $b;
}

sum("1", "2"); // Вызывает TypeError

Основные преимущества

  • Предотвращение скрытых ошибок типизации
  • Улучшение читаемости кода
  • Более предсказуемое поведение
  • Лучшая поддержка IDE

Практические примеры

Пример с Doctrine Entity

declare(strict_types=1);

#[ORM\Entity]
class Product {
    #[ORM\Column(type: 'integer')]
    private int $id;

    public function setId(int $id): void {
        $this->id = $id; // Ошибка при передаче строки
    }
}

Работа с API

declare(strict_types=1);

$data = json_decode($response, true);
processOrder((int)$data['id']); // Явное приведение типа

Важные особенности

  • Действует только в файле, где объявлен
  • Не влияет на производительность
  • Всегда проверяет объекты и массивы
  • Разрешает null для nullable-типов

Рекомендации по внедрению

  1. Начинать с новых файлов
  2. Постепенно добавлять в существующий код
  3. Использовать вместе с phpstan/psalm
  4. Избегать глобального включения через php.ini

Заключение

Strict Types — это важный инструмент для создания надёжного и поддерживаемого кода на PHP. Его использование особенно важно в современных проектах и при работе с такими фреймворками, как Symfony и Laravel.

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *