phpunit/php-token-stream
phpunit/php-token-stream is a small PHP library for tokenizing and streaming PHP source code tokens, commonly used by PHPUnit and related tools for parsing, reflection-like inspection, and test-related code analysis.
nikic/PHP-Parser), this package operates at the token level, making it suitable for:
@dataProvider arguments).composer require phpunit/php-token-stream (dev or prod dependency).nikic/PHP-Parser, phpstan/phpstan) offer higher-level abstractions (AST) and may be more maintainable for complex use cases.php-parser) better fit the need?
Example: Token streams excel at syntax checks (e.g., "detect unused use statements"), while ASTs are better for semantic analysis (e.g., "find all calls to a deprecated class").php-parser) preferable for future-proofing?echo statements")?@dataProvider arguments).nikic/PHP-Parser (more expressive but heavier).symfony/finder + regex (lower overhead).composer require --dev phpunit/php-token-stream).use PHPUnit\Util\Token\TokenStream;
$tokens = TokenStream::createFromCode($phpCode)->toArray();
composer.json (e.g., ^5.0) to avoid unexpected updates.composer require php:^8.1 --dev # Test against target PHP version
if (!extension_loaded('tokenizer')) {
throw new RuntimeException('Tokenizer extension is required.');
}
use PHPUnit\Util\Token\TokenStream;
class TokenAnalyzer {
public function hasEchoStatements(string $code): bool {
$tokens = TokenStream::createFromCode($code);
foreach ($tokens as $token) {
if ($token->getId() === T_ECHO) {
return true;
}
}
return false;
}
}
T_VARIABLE tokens).php-parser or phpstan/phpdoc-parser for better documentation.SplFileInfo + TokenStream in parallel workers (e.g., with reactphp).| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Tokenizer extension disabled | Runtime errors | Check extension_loaded('tokenizer') at startup. |
| PHP version incompatibility | Token stream misbehavior | Pin PHP version in composer.json. |
| Malformed PHP input | Unexpected token sequences | Validate input with TokenStream::createFromCode() and catch exceptions. |
| Memory leaks (custom logic) | High memory usage in long runs | Stream tokens incrementally; avoid storing entire streams. |
| Archived package abandonment | No updates for critical issues | Fork the package or migrate to a maintained alternative. |
T_ECHO, T_FUNCTION).TokenHelper class to abstract frequently used token checks.How can I help you explore Laravel packages today?