cloud-castle / support
Набор утилит для PHP 8.1+: строки (Str), массивы (Arr) с dot-нотацией, числа (Num), даты (Dates), объекты (Obj) и глобальные хелперы. Маскирование ПД из коробки, минимум зависимостей (только PSR и инфраструктура cloud-castle).
Requires
- php: >=8.1
- ext-mbstring: *
- cloud-castle/inflector: ^1.0
- psr/clock: ^1.0
Requires (Dev)
- adbario/php-dot-notation: ^2.5
- deptrac/deptrac: ^3.0 || ^4.0
- dflydev/dot-access-data: ^3.0
- ergebnis/composer-normalize: ^2.45
- friendsofphp/php-cs-fixer: ^3.75
- icanhazstring/composer-unused: ^0.9
- illuminate/support: ^10.0 || ^11.0
- infection/infection: ^0.29 || ^0.33
- nette/utils: ^4.0
- php-parallel-lint/php-parallel-lint: ^1.4
- phpmd/phpmd: ^2.15
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^1.12 || ^2.1
- phpstan/phpstan-deprecation-rules: ^1.2 || ^2.0
- phpstan/phpstan-phpunit: ^1.4 || ^2.0
- phpstan/phpstan-strict-rules: ^1.6 || ^2.0
- phpunit/phpunit: ^10.5 || ^11.5
- psalm/plugin-phpunit: ^0.19 || ^0.20
- rector/rector: ^1.2 || ^2.0
- roave/security-advisories: dev-latest
- squizlabs/php_codesniffer: ^3.12 || ^4.0
- symfony/property-access: ^6.4
- vimeo/psalm: ^6.0
- webmozart/assert: ^1.11
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-04 18:29:30 UTC
README
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
CloudCastle Support
Набор утилит для PHP 8.1+: строки (
Str), массивы (Arr), числа (Num), даты (Dates), объекты (Obj) и глобальные хелперы. API совместим с illuminate/support, но быстрее и с минимумом зависимостей (только PSR и инфраструктура cloud-castle).
Установка
composer require cloud-castle/support
Требуется PHP 8.1+.
Быстрый старт
<?php
use CloudCastle\Support\Str;
use CloudCastle\Support\Arr;
echo Str::snake('CloudCastleSupport'); // «cloud_castle_support»
echo Str::camel('foo_bar_baz'); // «fooBarBaz»
echo Str::mask('4111111111111111', '*', 6, 6); // «411111******1111» — маскирование ПД
$config = ['db' => ['host' => '127.0.0.1', 'port' => 5432]];
echo Arr::get($config, 'db.host'); // «127.0.0.1» — доступ по точечной нотации
$flat = Arr::dot($config); // ['db.host' => '127.0.0.1', 'db.port' => 5432]
Возможности
Str— регистрыsnake/camel/studly/kebab/title, срезыafter/before/between/take/charAt, заменаreplace/swap, транслитерация и слагиascii/slug/transliterate, инфлексияplural/singular, генерацияrandom/password/uuid, многобайтовыеupper/lower/lengthи др.Arr—get/set/has/forgetс точечной нотацией,dot/undot/flatten/collapse, функциональныеmap/mapWithKeys/keyBy/where/sort/shuffle/random,pluck/only/except/first/last.Num—format/currency/fileSize/abbreviate/ordinal, проценты,clamp, число прописьюspell(ru/en, безext-intl).Dates,Objи глобальные хелперы (functions.php).- Маскирование ПД (
Str::mask) — карты, счета, телефоны в логах/ответах. - Криптостойкая генерация —
random_int/random_bytesбез modulo-смещения. - Минимум зависимостей — только PSR (
psr/clock) и инфраструктура cloud-castle (cloud-castle/inflector), без тяжёлого стороннего кода.
Сравнение с аналогами
Все таблицы ниже сгенерированы автоматически из честных сравнительных тестов (benchmarks/compare.php) на ОДИНАКОВОЙ операции для всех аналогов, PHP 8.3.33, без Xdebug.
1. Функциональность
| Функциональность | 🏆 CloudCastle | illuminate | nette | adbario | dflydev | symfony |
|---|---|---|---|---|---|---|
| Доступ по dot-строке (get/set/has/forget) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ |
| Регистры и форматы имён (snake/camel/kebab/studly) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Транслитерация и слаги (ascii/slug) | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Маскирование ПД (mask) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Плюрализация/склонение (plural/singular) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Числа: формат/валюта/размеры | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Число прописью без ext-intl (spell) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Даты: diffHuman/startOf/isWeekend | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Массивы: map/keyBy/sort/where/dot | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Объекты: toArray/deepClone/classUses | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Генерация: uuid/пароль/random | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Без тяжёлых сторонних зависимостей | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ |
| Всего | 🏆 12 | 9 | 4 | 2 | 2 | 1 |
2. Безопасность и корректность
| Безопасность и корректность | 🏆 CloudCastle | illuminate | nette | adbario | dflydev | symfony |
|---|---|---|---|---|---|---|
| Null-safe доступ по пути со значением по умолчанию | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Маскирование ПД из коробки | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Многобайтовая корректность строк (UTF-8) | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Криптостойкая генерация (random_int, без bias) | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Строгая типизация (strict_types, нативные типы) | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
| Без тяжёлых сторонних зависимостей | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ |
| Детерминированность (без глобальной локали) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Всего | 🏆 7 | 5 | 6 | 4 | 4 | 2 |
3. Производительность — доступ по строковому пути в массиве
Доступ к вложенному значению по строковому пути, 200 000 раз (минимум из 4).
| Решение | Время (мс) | Итог |
|---|---|---|
| native¹ | 13,9 | базовый уровень (не библиотека) |
| 🏆 CloudCastle | 81,5 | быстрейшее среди библиотек |
| dflydev | 118,9 | аналог |
| adbario | 156,9 | аналог |
| illuminate | 163,1 | аналог |
| symfony | 472,2 | аналог |
4. Потребление памяти — доступ по строковому пути в массиве
Резидентный след библиотеки в операции «доступ по строковому пути в массиве» (изолированный замер, вычет baseline).
| Решение | Память (KB) | Итог |
|---|---|---|
| native¹ | 1 | базовый уровень (не библиотека) |
| 🏆 dflydev | 30 | легчайшее среди библиотек |
| adbario | 48 | аналог |
| CloudCastle | 75 | аналог |
| illuminate | 83 | аналог |
| symfony | 352 | аналог |
5. Производительность — обрезка строки по длине (UTF-8)
Обрезка многобайтовой строки до 12 символов с суффиксом, 200 000 раз (минимум из 4).
| Решение | Время (мс) | Итог |
|---|---|---|
| native¹ | 34,7 | базовый уровень (не библиотека) |
| 🏆 CloudCastle | 41,8 | быстрейшее среди библиотек |
| illuminate | 50,9 | аналог |
6. Потребление памяти — обрезка строки по длине (UTF-8)
Резидентный след библиотеки в операции «обрезка строки по длине (UTF-8)» (изолированный замер, вычет baseline).
| Решение | Память (KB) | Итог |
|---|---|---|
| native¹ | 1 | базовый уровень (не библиотека) |
| 🏆 CloudCastle | 148 | легчайшее среди библиотек |
| illuminate | 198 | аналог |
¹ Базовый уровень (нативные вызовы/примитивы без полноты решения) показан для контекста и не претендует на победу среди библиотек-аналогов.
Операции подобраны так, чтобы участники выполняли ОДИНАКОВУЮ работу: доступ по dot-строке разбирают сами библиотеки; для строковой оси берётся обрезка строки по длине с суффиксом (идентичный результат у всех). Память измеряется в изоляции — резидентный след только целевой библиотеки с вычетом baseline.
Плюсы и минусы
Плюсы:
- Самый широкий функционал среди сравниваемых — суперсет объединения возможностей illuminate, nette, symfony/property-access, adbario и dflydev.
- Быстрее аналогов на обеих измеренных операциях (dot-доступ и обрезка строк).
- Безопасность из коробки: маскирование ПД, криптостойкая генерация без modulo-смещения, строгая типизация, UTF-8-корректность, детерминизм.
- Качество: PHPStan max, Psalm level 1, 100% покрытие строк, Infection MSI 100%.
- Минимум зависимостей — только PSR и лёгкая инфраструктура cloud-castle.
Минусы (честно):
- Моложе и менее распространён, чем illuminate/nette — меньше звёзд, установок и сторонних материалов (главный и, по сути, единственный минус).
- Резидентный след чуть выше, чем у узкоспециальных dot-библиотек (dflydev, adbario) и nette в конкретной операции: один класс несёт полный набор утилит, поэтому его загрузка стоит немного больше памяти. Осознанный компромисс в пользу функционала; среди полнофункциональных аналогов (illuminate) след ниже.
Когда использовать
- Микросервисы и пакеты без Laravel — полный набор утилит без тяжёлого слоя фреймворка и лишних зависимостей.
- Финтех и обработка ПД — маскирование карт/счетов/телефонов и криптостойкая генерация токенов «из коробки».
- Многоязычные проекты — транслитерация, слаги, склонения и число прописью
(ru/en) без
ext-intl. - Строгие по качеству кодовые базы — предсказуемая строгая типизация и детерминированное поведение.
Если проект уже живёт в экосистеме Laravel, где illuminate/support и Collection
подключены нативно, — там уместнее штатные хелперы фреймворка.
Вывод: CloudCastle Support даёт самый широкий набор утилит среди аналогов, опережает их по скорости на измеренных операциях и несёт безопасность (маскирование ПД, криптостойкая генерация) при минимуме зависимостей — ценой чуть большего резидентного следа, чем у узкоспециальных библиотек.
Разработка
composer install
composer check # линтеры + статический анализ + тесты
composer fix # автоисправления (Rector, PHP CS Fixer, PHPCBF)
composer ci # полный CI-пайплайн локально
Полный список команд с описаниями: composer run-script --list.
Документация
- Репозиторий: https://gitverse.ru/cloud-castle/support
- История изменений: CHANGELOG.md
- Как внести вклад: CONTRIBUTING.md
- Кодекс поведения: CODE_OF_CONDUCT.md
- Политика безопасности: SECURITY.md
Лицензия
MIT © CloudCastle (alex-4-17@yandex.ru)
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano