cloudcastle/inflector
Composer 安装命令:
composer require cloudcastle/inflector
包简介
Production-ready PHP 8.1+ package (CloudCastle Inflector).
关键字:
README 文档
README
Мультиязычный инфлектор для PHP 8.1+ без зависимостей: пять языков (русский, английский, немецкий, французский, испанский), склонение по падежам и числам, спряжение глаголов по временам, счётная форма, транслитерация кириллица ↔ латиница и автоматическое определение языка.
Установка
composer require cloudcastle/inflector
Требуется PHP 8.1+. Runtime-зависимостей нет (zero-dependency).
Быстрый старт
<?php use CloudCastle\Inflector\Inflector; use CloudCastle\Inflector\Language; use CloudCastle\Inflector\GrammaticalCase; use CloudCastle\Inflector\GrammaticalNumber; use CloudCastle\Inflector\Tense; use CloudCastle\Inflector\Person; // Авто-определение языка по каждому слову (язык не задан) $inflector = new Inflector(); $inflector->pluralize('стол'); // 'столы' $inflector->pluralize('category'); // 'categories' $inflector->singularize('châteaux'); // 'château' // Фиксированный язык (быстрее: без детекта) $ru = new Inflector(Language::Russian); // Склонение по падежам и числам $ru->decline('стол', GrammaticalCase::Genitive); // 'стола' $ru->decline('стол', GrammaticalCase::Dative, GrammaticalNumber::Plural); // 'столам' // Счётная форма: 1 товар / 2 товара / 5 товаров $ru->pluralizeByCount('товар', 1); // 'товар' $ru->pluralizeByCount('товар', 2); // 'товара' $ru->pluralizeByCount('товар', 5); // 'товаров' // Спряжение по временам, лицам и числам $ru->conjugate('работать', Tense::Past); // 'работал' $ru->conjugate('работать', Tense::Present, Person::First); // 'работаю' $ru->conjugate('работать', Tense::Future); // 'будет работать' // Транслитерация и слаги $inflector->toLatin('щука'); // 'shchuka' $inflector->toCyrillic('privet'); // 'привет' $inflector->transliterate('привет'); // 'privet' (направление — автоматически) $inflector->slugify('Привет мир'); // 'privet-mir' // Определение языка $inflector->detectLanguage('mañana'); // Language::Spanish // Форматы имён для ORM/API $inflector->tableize('UserAccount'); // 'user_accounts' $inflector->classify('user_accounts'); // 'UserAccount' $inflector->camelize('foo_bar'); // 'fooBar'
Возможности
- Пять языков — русский, английский, немецкий, французский, испанский; единый
API и контракт правил (
LanguageRulesInterface) для добавления новых языков. - Число существительных —
pluralize/singularizeс нерегулярными парами и неисчисляемыми словами каждого языка; счётная формаpluralizeByCount(1 товар / 2 товара / 5 товаров). - Склонение — 6 русских падежей в обоих числах (регулярные парадигмы 1/2/3 склонения и среднего рода), немецкие Genitiv и Dativ Plural.
- Спряжение — прошедшее, настоящее и будущее время по лицам и числам: регулярные парадигмы всех пяти языков + частотные нерегулярные английские глаголы.
- Транслитерация — кириллица → латиница и латиница → кириллица (практическая
схема, многобуквенные сочетания
shch/zh/yo), автонаправление по алфавиту. - Определение языка — по алфавиту, диакритике (ß/ü, ñ, ç/œ) и частотным служебным словам; опция конструктора: авто-режим или фиксированный язык.
- Форматы имён —
camelize/pascalize/underscore/tableize/classify/dasherize/titleize/humanize, слаги с транслитерацией, порядковые числительные по правилам языка (1-й,1st,1.,1er,1.º). - Расширяемость — пользовательские нерегулярные пары, неисчисляемые слова и regex-правила per-язык.
- Производительность — ограниченные (bounded) кэши всех горячих путей: O(1) на повторяющемся вводе без неограниченного роста памяти.
Функционально пакет покрывает возможности сравниваемых аналогов вместе взятых:
doctrine/inflector, symfony/string (инфлекторы), wapmorgan/morphos, ext-intl.
Возможности против аналогов
Сводная таблица (генерируется автоматически из tools/features-data.php; значения выверены
по коду и документации аналогов). Легенда: ✅ полностью · ⚠️ частично · 🔌 адаптер · ❌ нет · — неприменимо.
Сгенерировано из tools/features-data.php (факты о поддержке). Легенда: ✅ полностью · ⚠️ частично · 🔌 адаптер · ❌ нет · — неприменимо.
Языки
| Функция | Inflector | doctrine | symfony | morphos | intl | 🏆 Победитель |
|---|---|---|---|---|---|---|
| Английский | ✅ | ✅ | ✅ | ⚠️ | — | Паритет |
| Русский | ✅ | ❌ | ❌ | ✅ | — | Inflector, morphos |
| Немецкий | ✅ | ❌ | ❌ | ❌ | — | Inflector |
| Французский | ✅ | ❌ | ✅ | ❌ | — | Inflector, symfony |
| Испанский | ✅ | ❌ | ❌ | ❌ | — | Inflector |
| Авто-определение языка | ✅ | ❌ | ❌ | ❌ | ❌ | Inflector |
Число существительных
| Функция | Inflector | doctrine | symfony | morphos | intl | 🏆 Победитель |
|---|---|---|---|---|---|---|
| pluralize / singularize | ✅ | ✅ | ✅ | ✅ | ❌ | Паритет |
| Счётная форма (1 товар / 2 товара / 5 товаров) | ✅ | ❌ | ❌ | ✅ | ❌ | Inflector, morphos |
| Нерегулярные и неисчисляемые слова | ✅ | ✅ | ⚠️ | ✅ | ❌ | Паритет |
Склонение и спряжение
| Функция | Inflector | doctrine | symfony | morphos | intl | 🏆 Победитель |
|---|---|---|---|---|---|---|
| 6 русских падежей (ед. и мн. число) | ✅ | ❌ | ❌ | ✅ | ❌ | Inflector, morphos |
| Немецкие падежи (Genitiv, Dativ Pl.) | ✅ | ❌ | ❌ | ❌ | ❌ | Inflector |
| Спряжение глаголов (3 времени × лица × числа) | ✅ | ❌ | ❌ | ⚠️ | ❌ | Inflector |
| Спряжение на 5 языках | ✅ | ❌ | ❌ | ❌ | ❌ | Inflector |
Транслитерация
| Функция | Inflector | doctrine | symfony | morphos | intl | 🏆 Победитель |
|---|---|---|---|---|---|---|
| Кириллица → латиница | ✅ | ❌ | ❌ | ⚠️ | ✅ | Паритет |
| Латиница → кириллица | ✅ | ❌ | ❌ | ❌ | ✅ | Inflector, intl |
| Автонаправление по алфавиту | ✅ | ❌ | ❌ | ❌ | ❌ | Inflector |
| Без расширений PHP (zero-dependency) | ✅ | ✅ | ⚠️ | ✅ | ❌ | Inflector, doctrine, morphos |
Форматы имён (ORM/API)
| Функция | Inflector | doctrine | symfony | morphos | intl | 🏆 Победитель |
|---|---|---|---|---|---|---|
| camelize / pascalize / underscore | ✅ | ✅ | 🔌 | ❌ | ❌ | Inflector, doctrine |
| tableize / classify | ✅ | ✅ | ❌ | ❌ | ❌ | Inflector, doctrine |
| Слаги с транслитерацией кириллицы | ✅ | ❌ | ⚠️ | ❌ | 🔌 | Inflector |
| Порядковые числительные по языкам | ✅ | ❌ | ❌ | ⚠️ | 🔌 | Inflector |
Расширяемость
| Функция | Inflector | doctrine | symfony | morphos | intl | 🏆 Победитель |
|---|---|---|---|---|---|---|
| Пользовательские нерегулярные пары | ✅ | ⚠️ | ❌ | ❌ | ❌ | Inflector |
| Пользовательские regex-правила | ✅ | ⚠️ | ❌ | ❌ | ❌ | Inflector |
| Единый интерфейс правил для новых языков | ✅ | ❌ | ⚠️ | ⚠️ | ❌ | Inflector |
Производительность и нагрузка
| Функция | Inflector | doctrine | symfony | morphos | intl | 🏆 Победитель |
|---|---|---|---|---|---|---|
| Ограниченный кэш (нет утечки на уникальном вводе) | ✅ | ❌ | — | — | — | Inflector |
| O(1) на повторяющемся вводе | ✅ | ✅ | ❌ | ❌ | ❌ | Inflector, doctrine |
| Стабильная память при 100k+ уникальных слов | ✅ | ❌ | ✅ | ✅ | ✅ | Inflector, symfony, morphos |
Безопасность и качество
| Функция | Inflector | doctrine | symfony | morphos | intl | 🏆 Победитель |
|---|---|---|---|---|---|---|
| Fail-safe: неизвестный ввод не бросает исключений | ✅ | ✅ | ✅ | ⚠️ | ⚠️ | Паритет |
| Ввод — данные, не код (без eval/интерполяции) | ✅ | ✅ | ✅ | ✅ | ✅ | Паритет |
| Мутационное тестирование MSI 100% | ✅ | ❌ | ❌ | ❌ | — | Inflector |
| Fuzzing-инфраструктура (ClusterFuzzLite) | ✅ | ❌ | ❌ | ❌ | — | Inflector |
Производительность
Изолированные замеры без Xdebug (composer compare), эквивалентные операции. Метрика —
ops/sec (больше — лучше); «—» — операция не поддерживается.
Сгенерировано из composer compare (PHP 8.1.34). Правки в блоке будут перезаписаны.
| Сценарий | cloudcastle/inflector | doctrine/inflector | symfony/string | wapmorgan/morphos | ext-intl (ICU) |
|---|---|---|---|---|---|
| EN плюрализация (category → categories) | 14958288 ops/s | 12127523 ops/s | 313425 ops/s | — | — |
| RU плюрализация (стол → столы) | 15445789 ops/s | — | — | 90813 ops/s | — |
| RU родительный падеж (стол → стола) | 1099396 ops/s | — | — | 92191 ops/s | — |
| RU счётная форма (5 → товаров) | 875702 ops/s | — | — | 83637 ops/s | — |
| FR плюрализация (journal → journaux) | 14868146 ops/s | — | 839062 ops/s | — | — |
| Имя таблицы (FooBar → foo_bars) | 14926349 ops/s | 2715111 ops/s | — | — | — |
| Имя класса (foo_bars → FooBar) | 15152832 ops/s | 5347831 ops/s | — | — | — |
| Транслитерация RU → латиница | 2318063 ops/s | — | — | — | 8571 ops/s |
| Определение языка (кириллица) | 5467384 ops/s | — | — | — | — |
Полное сравнение по каждой возможности — в Wiki: Сравнение.
Заключение: когда что выбирать
Сильные стороны cloudcastle/inflector — единственный PHP-пакет, объединяющий инфлексию пяти языков, склонение по падежам, спряжение по временам, счётную форму, транслитерацию и автоопределение языка — при нуле runtime-зависимостей. Все горячие пути работают с ограниченной памятью (bounded-кэши со сбросом), любой «грязный» ввод обрабатывается fail-safe (данные, не код), мутационное покрытие — Infection MSI 100 %.
Производительность: победитель во всех девяти сценариях сравнения — от
английской плюрализации (быстрее doctrine/inflector в ~1.2×) до русской морфологии
(быстрее wapmorgan/morphos в ~10–170×) и транслитерации (быстрее ext-intl ICU
в ~270×). Замеры изолированные, без Xdebug (composer compare).
Слабые стороны — морфология построена на регулярных парадигмах без полного словаря: одушевлённость русских существительных не определяется (винительный падеж неодушевлённый), слова на «-ь» склоняются по женскому 3-му склонению, нерегулярные глаголы (кроме частотных английских) спрягаются только по регулярным схемам. Для задач, где нужна словарная точность каждой формы, используйте морфологический анализатор с полным словарём.
Честные рекомендации:
- Мультиязычное приложение (интерфейсы, счётчики, URL, ORM) —
cloudcastle/inflector. - Только английская инфлексия в Doctrine-проекте —
doctrine/inflectorуже в зависимостях ORM. - Только английское/французское число в Symfony —
symfony/stringуже в фреймворке. - Русская морфология со словарной точностью (имена, отчества, географические названия) —
wapmorgan/morphos. - Транслитерация экзотических письменностей (не кириллица) —
ext-intl(ICU).
Документация
- Wiki — руководство пользователя
- Быстрый старт
- Возможности (Features)
- Сравнение с аналогами
- Архитектура
- API-документация
Качество
Пакет придерживается production-стандартов: строгая типизация, полный статический анализ (PHPStan max, Psalm level 1, PHPMD, Deptrac, Rector), покрытие тестами 100 % на каждый файл и мутационное тестирование (Infection MSI 100 %). Матрица CI — PHP 8.1–8.5.
composer ci # полный пайплайн качества composer check # быстрые проверки перед коммитом composer test # тесты (unit + integration + security + load + performance) composer compare # сравнение производительности с аналогами
Контакты
- Email — alex-4-17@yandex.ru
- VK — https://vk.com/leha_zorin
- Telegram — @CloudCastle85
- Телефон — +79872763991
- Сетка — https://set.ki/LdYRz76
Поддержать проект
Реквизиты для поддержки автора — в DONATE.md.
Contributors
Спасибо всем, кто вносит вклад в проект:
Список ведётся по спецификации all-contributors.
Лицензия
MIT © CloudCastle
cloudcastle/inflector 适用场景与选型建议
cloudcastle/inflector 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 0 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 07 月 15 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「inflector」 「php8」 「cloudcastle」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 cloudcastle/inflector 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 cloudcastle/inflector 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 cloudcastle/inflector 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Utils Library for every day
Simple PHP Inflector
Powerful class discovery system for Laravel with attribute-based scanning, directory traversal, and monorepo support
Pluralize library
- [ Inflector ] class for string manipulating
PHP Inflector, ported from Rails
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 4
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-07-15