{"id":28746838,"url":"https://github.com/bermudaphp/tokenizer","last_synced_at":"2025-07-10T00:34:06.713Z","repository":{"id":298513806,"uuid":"1000222231","full_name":"bermudaphp/tokenizer","owner":"bermudaphp","description":"PHP tokenizer for finding class, interface, trait, and enum declarations.","archived":false,"fork":false,"pushed_at":"2025-06-11T13:35:39.000Z","size":70,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-06-11T14:42:22.889Z","etag":null,"topics":["parser","php","php84","tokenization","tokenizer"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bermudaphp.png","metadata":{"files":{"readme":"README.RU.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-11T12:56:43.000Z","updated_at":"2025-06-11T13:33:50.000Z","dependencies_parsed_at":"2025-06-11T14:52:46.383Z","dependency_job_id":null,"html_url":"https://github.com/bermudaphp/tokenizer","commit_stats":null,"previous_names":["bermudaphp/tokenizer"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/bermudaphp/tokenizer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bermudaphp%2Ftokenizer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bermudaphp%2Ftokenizer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bermudaphp%2Ftokenizer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bermudaphp%2Ftokenizer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bermudaphp","download_url":"https://codeload.github.com/bermudaphp/tokenizer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bermudaphp%2Ftokenizer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264506214,"owners_count":23619002,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["parser","php","php84","tokenization","tokenizer"],"created_at":"2025-06-16T15:48:44.298Z","updated_at":"2025-07-10T00:34:06.667Z","avatar_url":"https://github.com/bermudaphp.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# bermudaphp/tokenizer\n\n[🇺🇸 English](README.md) | 🇷🇺 Русский\n\nОптимизированный PHP токенизатор для поиска объявлений классов, интерфейсов, трейтов и енумов.\n\n## Особенности\n\n- **Полная поддержка PHP 8+** - работает с классами, интерфейсами, трейтами и енумами\n- **Поддержка модификаторов** - abstract, final, readonly классы\n- **Игнорирование анонимных классов** - фокус на именованных объявлениях\n- **Поддержка атрибутов PHP** - корректная обработка `#[Attribute]`\n- **Виртуальные свойства** - удобный доступ к информации о классах\n- **Настраиваемый поиск** - битовые флаги для выборочного поиска\n\n## Установка\n\n```bash\ncomposer require bermudaphp/tokenizer\n```\n\n## Быстрый старт\n\n```php\n\u003c?php\n\nuse Bermuda\\Tokenizer\\Tokenizer;\nuse Bermuda\\Tokenizer\\TokenizerInterface;\n\n$tokenizer = new Tokenizer();\n$source = '\u003c?php \nnamespace App\\Models;\n\nabstract class User {\n    // ...\n}\n\ninterface UserInterface {\n    // ...\n}\n';\n\n// Найти все объявления\n$declarations = $tokenizer-\u003eparse($source);\n\nforeach ($declarations as $classInfo) {\n    echo \"Найден {$classInfo-\u003etype}: {$classInfo-\u003efullQualifiedName}\\n\";\n    echo \"Пространство имен: {$classInfo-\u003enamespace}\\n\";\n    echo \"Имя класса: {$classInfo-\u003ename}\\n\";\n    echo \"Абстрактный: \" . ($classInfo-\u003eisAbstract ? 'да' : 'нет') . \"\\n\";\n    echo \"---\\n\";\n}\n```\n\n## Режимы поиска\n\nИспользуйте битовые флаги для настройки типов объявлений для поиска:\n\n```php\n// Искать только классы\n$classes = $tokenizer-\u003eparse($source, TokenizerInterface::SEARCH_CLASSES);\n\n// Искать только интерфейсы и трейты\n$interfaces = $tokenizer-\u003eparse($source, \n    TokenizerInterface::SEARCH_INTERFACES | TokenizerInterface::SEARCH_TRAITS\n);\n\n// Искать всё (по умолчанию)\n$all = $tokenizer-\u003eparse($source, TokenizerInterface::SEARCH_ALL);\n```\n\n### Доступные флаги\n\n| Константа | Значение | Описание |\n|-----------|----------|----------|\n| `SEARCH_CLASSES` | 1 | Искать классы |\n| `SEARCH_INTERFACES` | 2 | Искать интерфейсы |\n| `SEARCH_TRAITS` | 4 | Искать трейты |\n| `SEARCH_ENUMS` | 8 | Искать енумы |\n| `SEARCH_ALL` | 15 | Искать всё |\n\n## ClassInfo API\n\nКласс `ClassInfo` предоставляет подробную информацию о найденных объявлениях:\n\n### Свойства\n\n```php\n$classInfo-\u003efullQualifiedName;  // string: Полное квалифицированное имя\n$classInfo-\u003etype;              // string: 'class'|'interface'|'trait'|'enum'\n$classInfo-\u003eisAbstract;        // bool: Абстрактный класс\n$classInfo-\u003eisFinal;           // bool: Финальный класс\n$classInfo-\u003eisReadonly;        // bool: Readonly класс\n```\n\n### Виртуальные свойства\n\n```php\n$classInfo-\u003ename;              // string: Имя без пространства имен\n$classInfo-\u003enamespace;         // string: Пространство имен без имени класса\n$classInfo-\u003eisClass;          // bool: Это класс?\n$classInfo-\u003eisInterface;      // bool: Это интерфейс?\n$classInfo-\u003eisTrait;          // bool: Это трейт?\n$classInfo-\u003eisEnum;           // bool: Это енум?\n$classInfo-\u003eisConcrete;       // bool: Конкретный класс (не абстрактный)?\n$classInfo-\u003ereflector;        // ReflectionClass|ReflectionEnum: Рефлектор\n```\n\n### Методы\n\n```php\n$classInfo-\u003eexists();         // bool: Существует ли класс в памяти\n```\n\n## Примеры использования\n\n### Поиск конкретных классов\n\n```php\n$source = file_get_contents('path/to/file.php');\n$declarations = $tokenizer-\u003eparse($source, TokenizerInterface::SEARCH_CLASSES);\n\n$concreteClasses = array_filter($declarations, fn($info) =\u003e $info-\u003eisConcrete);\n```\n\n### Работа с рефлекцией\n\n```php\nforeach ($declarations as $classInfo) {\n    if ($classInfo-\u003eexists()) {\n        $reflection = $classInfo-\u003ereflector;\n        echo \"Класс {$classInfo-\u003ename} имеет \" . count($reflection-\u003egetMethods()) . \" методов\\n\";\n    }\n}\n```\n\n### Группировка по пространствам имен\n\n```php\n$byNamespace = [];\nforeach ($declarations as $classInfo) {\n    $byNamespace[$classInfo-\u003enamespace][] = $classInfo-\u003ename;\n}\n```\n\n## Требования\n\n- PHP 8.4 или выше\n- Расширение `tokenizer` (обычно входит в стандартную сборку PHP)\n\n## Лицензия\n\nMIT License. Подробности в файле [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbermudaphp%2Ftokenizer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbermudaphp%2Ftokenizer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbermudaphp%2Ftokenizer/lists"}