Метка: типизация

  • 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.