componenta/tokenizer

Token-based PHP source inspection helpers for Componenta

Maintainers

Package info

github.com/componenta/tokenizer

pkg:composer/componenta/tokenizer

Statistics

Installs: 2

Dependents: 5

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-06-15 11:07 UTC

This package is auto-updated.

Last update: 2026-06-15 12:06:56 UTC


README

PHP declaration tokenizer used by class discovery.

Installation

composer require componenta/tokenizer

Requirements

  • PHP 8.4+

Related Packages

Package Why it matters here
componenta/class-finder Walks PHP files and uses this tokenizer for each source file.
componenta/app and *-app packages Use class discovery during application cache compilation.
PHP Reflection Used only when ClassInfo::$reflector is requested and the declaration is autoloadable.

What It Provides

  • TokenizerInterface: public contract for parsing PHP source.
  • Tokenizer: token-based parser for named declarations.
  • ClassInfo: immutable declaration metadata with lazy reflection.
  • DeclarationType: enum for class, interface, trait, and enum declarations.

Anonymous classes are ignored. The tokenizer assumes syntactically valid PHP input.

Parsing Source

use Componenta\Tokenizer\Tokenizer;

$declarations = (new Tokenizer())->parse(<<<'PHP'
<?php

namespace App;

final readonly class User {}
interface UserRepository {}
trait Timestamped {}
enum UserStatus: string { case Active = 'active'; }
PHP);

Each item is a ClassInfo:

$info = $declarations[0];

$info->fullyQualifiedName; // App\User
$info->name;               // User
$info->namespace;          // App
$info->type;               // DeclarationType::Class_
$info->isFinal;            // true
$info->isReadonly;         // true
$info->isConcrete;         // true

Search Modes

Use bitmasks to restrict declaration types:

use Componenta\Tokenizer\TokenizerInterface;

$classes = $tokenizer->parse($source, TokenizerInterface::SEARCH_CLASSES);
$contracts = $tokenizer->parse(
    $source,
    TokenizerInterface::SEARCH_INTERFACES | TokenizerInterface::SEARCH_TRAITS,
);

Available flags:

  • SEARCH_CLASSES
  • SEARCH_INTERFACES
  • SEARCH_TRAITS
  • SEARCH_ENUMS
  • SEARCH_ALL

Reflection

ClassInfo::$reflector is lazy and requires the declaration to already be loaded.

if ($info->exists()) {
    $reflector = $info->reflector;
}