token_get_all
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
token_get_all — Разбивает исходный код на PHP-лексемы
Описание
Раздел «Список токенов парсера» перечисляет лексемы синтаксического анализатора.
Символьное название отдельного токена возвращает функция 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-лексемы