-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature DotPaths
github-actions[bot] edited this page Jul 16, 2026
·
1 revision
Чтение и запись вложенных значений по пути «a.b.c» — как в joomla/registry и dflydev/dot-access-data, но быстрее обоих: простые ключи идут одним hash-lookup, разбор путей кэшируется.
-
set('db.pgsql.host', '…')— создаёт промежуточные ветки; скаляр посреди пути перезаписывается веткой. -
get('db.pgsql.host', $default)— обрыв пути (отсутствие сегмента, скаляр или null посреди пути) возвращает$default. -
Null-значение на листе отличается от отсутствующего ключа:
get()вернётnull-значение, а не default;has()вернётtrue. - Плоский ключ с точкой в имени (
['a.b' => 1]) имеет приоритет над путём. -
forget('a.b')— удаляет лист; обрыв пути — тихий no-op. -
merge($layer)— рекурсивное слияние слоя поверх текущих значений. -
extract('db')— подветка как независимый реестр.
use CloudCastle\Registry\Registry;
$config = new Registry(['db' => ['host' => 'localhost']]);
$config->set('db.port', 5432);
$config->get('db.host'); // 'localhost'
$config->get('db.user', 'app'); // 'app' — default
$config->has('db.port'); // true
$config->merge(['db' => ['host' => 'prod']]);
$config->get('db.host'); // 'prod', порт сохранён
$db = $config->extract('db'); // независимая копия подветкиРазбор пути (explode + выделение листа) выполняется один раз на уникальный
ключ и кэшируется (bounded-кэш на 10 000 путей со сбросом при переполнении —
память не растёт). Горячий шаг навигации — isset-суперинструкция VM.
| Операция | Registry | joomla | dflydev |
|---|---|---|---|
| Чтение пути (3 уровня) | ~2.9M ops/s | ~2.1M | ~1.9M |
| Проверка пути (has) | ~3.2M ops/s | ~2.6M | ~1.9M |
| Запись пути | ~2.5M ops/s | ~1.6M | ~1.7M |
CloudCastle Registry · · PHP 8.1+
GitHub · Packagist · Releases · Discussions
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)