Skip to content

Feature TypedAccess

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

🛡️ Типизированный доступ

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

Fail-safe чтение с гарантией типа: несовпадение — контрактное исключение с именем ключа, ожидаемым и фактическим типами. Ни один из пяти аналогов такого не даёт: joomla тихо кастует, остальные возвращают mixed.

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

  • string/int/float/bool/array — значение ровно этого типа или TypeMismatchException; исключение — float принимает int (безопасное расширение).
  • instanceOf($key, Some::class) — объект заданного класса/интерфейса с корректным типом возврата для статанализаторов (@return T).
  • Default подставляется только при отсутствии ключа: существующее значение неверного типа — всегда исключение (default не маскирует ошибку).
  • Отсутствие ключа без default — KeyNotFoundException.
  • require($key) — нетипизированное обязательное значение.
use CloudCastle\Registry\Registry;

$config = new Registry(['порт' => 5432, 'лимит' => '100']);

$config->int('порт');          // 5432
$config->int('нет', 8080);     // 8080 — default при отсутствии
$config->int('лимит');         // TypeMismatchException: тип string, ожидался int
$config->int('лимит', 10);     // ТОЖЕ исключение — default не маскирует ошибку типа

$config->instanceOf('логгер', LoggerInterface::class); // типизированный объект

Зачем это в финтехе

Значение «отравленное» извне (строка вместо числа из ENV, JSON или БД) обнаруживается в момент чтения с точным сообщением — а не через три слоя логики тихим кастом (int) '100; DROP TABLE'.

См. также

Clone this wiki locally