Skip to content

Feature Type Casting

github-actions[bot] edited this page Jul 16, 2026 · 1 revision

🔢 Приведение типов

← Возможности · Главная · Сравнение

Переменные окружения — всегда строки; типизатор приводит их к bool/int/float/null и даёт типизированные геттеры с обратимостью, чтобы не терять данные.

Принцип работы

TypeCaster распознаёт булевы литералы (true/false/yes/no/on/off), null (null/(null)), целые и дробные числа. Фасад Env даёт как авто-приведение (get), так и явные геттеры.

Env::get('APP_DEBUG');   // bool(true)   — из "true"/"yes"/"on"
Env::get('DB_PORT');     // int(5432)
Env::get('RATE');        // float(0.75)
Env::get('OPTIONAL');    // null

Env::getBool('APP_DEBUG');
Env::getInt('DB_PORT', 5432);
Env::getFloat('RATE');
Env::getList('HOSTS');   // "a,b,c" → ['a','b','c']
Env::getString('NAME');  // без приведения

Обратимость

Значение считается целым, только если совпадает со своей же канонической записью после (int). Это отсекает потерю данных:

Вход Env::get() Почему
42 int(42) канонично
007 string("007") ведущий ноль потерялся бы
+5 string("+5") знак + потерялся бы
3.0 string("3.0") дробная запись потерялась бы
1e5 string("1e5") экспонента потерялась бы
9223372036854775808 string(...) переполнение int

Плюсы

  • Единая семантика авто-приведения и явных геттеров.
  • Обратимость защищает идентификаторы, коды, версии от порчи.
  • getInt/getFloat принудительно приводят, когда нужно именно число.

Минусы

  • Авто-get() возвращает bool|int|float|string|null — для строгой типизации на месте используйте явные геттеры.

✅ Рекомендуется

  • Явный геттер с значением по умолчанию для конфигурации известного типа: Env::getInt('WORKERS', 4).

❌ Антипаттерны

  • Сравнивать Env::get('FLAG') === 'true' — авто-приведение уже вернёт bool. Используйте Env::getBool('FLAG').

Схема фичи

flowchart TD
    S["строка"] --> N{"null-литерал?"}
    N -->|да| NUL[null]
    N -->|нет| B{"булев литерал?"}
    B -->|да| BOOL[bool]
    B -->|нет| I{"обратимый int?"}
    I -->|да| INT[int]
    I -->|нет| FL{"обратимый float?"}
    FL -->|да| FLOAT[float]
    FL -->|нет| STR[string]
Loading

Сравнение с аналогами

Возможность Env vlucas symfony josegonzalez m1 devcoder 🏆 Победитель
Авто-cast bool/int/float/null Env, devcoder
Обратимость (007/3.0/1e5) ⚠️ Env
Типизированные геттеры Env

Clone this wiki locally