token_get_all

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

token_get_allРазбивает исходный код на PHP-лексемы

Описание

token_get_all(string $code, int $flags = 0): array

Функция token_get_all() разбирает строку code на токены языка PHP средствами лексического сканера движка Zend.

Раздел «Список токенов парсера» перечисляет лексемы синтаксического анализатора. Символьное название отдельного токена возвращает функция token_name(), которая преобразовывает целочисленный идентификатор токена в строковое представление.

Список параметров

code

Исходный PHP-код для разбора.

flags

Параметр принимает следующие флаги:

  • TOKEN_PARSE — Включает проверку синтаксиса внутри PHP-тегов.

Возвращаемые значения

Функция возвращает массив идентификаторов лексем. Каждую отдельную лексему функция представляет в массиве или как строку из одного символа наподобие ;, ., >, !, или как 3-элементный массив, который содержит целочисленный идентификатор лексемы в элементе с индексом 0, строковое содержимое исходного токена в элементе с индексом 1 и номер строки в элементе с индексом 2.

Примеры

Пример #1 Пример разбивки исходного PHP-кода на токены функцией token_get_all()

<?php

$tokens
= token_get_all('<?php echo; ?>');

foreach (
$tokens as $token) {
if (
is_array($token)) {
echo
"Строка {$token[2]}: ", token_name($token[0]), " ('{$token[1]}')", PHP_EOL;
}
}

?>

Вывод приведённого примера будет похож на:

Строка 1: T_OPEN_TAG ('<?php ')
Строка 1: T_ECHO ('echo')
Строка 1: T_WHITESPACE (' ')
Строка 1: T_CLOSE_TAG ('?>')

Пример #2 Пример неправильной строки для разбивки функцией token_get_all()

<?php

$tokens
= token_get_all('/* комментарий */');

foreach (
$tokens as $token) {
if (
is_array($token)) {
echo
"Строка {$token[2]}: ", token_name($token[0]), " ('{$token[1]}')", PHP_EOL;
}
}

?>

Вывод приведённого примера будет похож на:

Строка 1: T_INLINE_HTML ('/* комментарий */')
Обратите внимание, в приведённом примере функция разобрала строку как токен T_INLINE_HTML, а не как предполагаемый T_COMMENT. Это связано с пропуском открывающего PHP-тега в строке кода: функция обрабатывает текст вне PHP-тегов как строку в режиме HTML-разметки, а не кода.

Пример #3 Пример разбивки кода класса с зарезервированными словами функцией token_get_all()

<?php

$source
= <<<'code'
<?php

class A
{
const PUBLIC = 1;
}
code;

$tokens = token_get_all($source, TOKEN_PARSE);

foreach (
$tokens as $token) {
if (
is_array($token)) {
echo
token_name($token[0]) , PHP_EOL;
}
}

?>

Вывод приведённого примера будет похож на:

T_OPEN_TAG
T_WHITESPACE
T_CLASS
T_WHITESPACE
T_STRING
T_CONST
T_WHITESPACE
T_STRING
T_LNUMBER
Без флага TOKEN_PARSE вместо предпоследнего токена T_STRING функция вернула бы токен T_PUBLIC.

Смотрите также

  • PhpToken::tokenize() - Разбирает заданную строку, содержащую программу на PHP, на массив объектов PhpToken
  • token_name() - Получает символическое название PHP-лексемы