В PHP 8 вместо
foreach (token_get_all($code) as $token) {
if (is_string($token)) {
// одиночный символ, например, ;
continue;
}
[$pos, $text, $line] = $token;
}
можно будет писатьforeach (PhpToken::getAll($code) as $token) {
$token->id;
$token->text;
$token->line;
$token->pos;
$token->is([T_CLASS, T_CONST]);
}
При прочих равных второй вариант потребует меньше памяти и времени. Это значит, что различные парсеры, например, nikic/php-parser, doctrine/annotations или twig/twig в будущем будут работать немного быстрее 😊Кроме того, класс
PhpToken легко расширяется, статический метод getAll() предусмотрительно возвращает static[].@vudaltsov | https://twitter.com/vudaltsov