array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), 'this' => array ( 0 => 'function.token-get-all.php', 1 => 'token_get_all', ), 'up' => array ( 0 => 'ref.tokenizer.php', 1 => 'Функции PHP-лексера (tokenizer)', ), 'prev' => array ( 0 => 'ref.tokenizer.php', 1 => 'Функции PHP-лексера (tokenizer)', ), 'next' => array ( 0 => 'function.token-name.php', 1 => 'token_name', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ru', 'path' => 'reference/tokenizer/functions/token-get-all.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
token_get_all — Разбивает переданный исходный код на PHP-лексемы
Функция token_get_all() разбирает переданную строку code
в языковые лексемы PHP, используя лексический сканер Zend Engine.
Список лексем смотрите в Список меток (tokens) парсера или используйте token_name() для перевода значения лексемы в строковое представление.
code
Исходный код PHP для разбора.
flags
Корректные флаги:
TOKEN_PARSE
- Распознает возможность использования
зарезервированных слов в определённых контекстах.
Массив идентификаторов лексем. Каждый индивидуальный идентификатор лексемы это или
одиночный символ (например, ;
, .
,
>
, !
, другие...),
или трёхэлементный массив, содержащий индекс лексемы в нулевом элементе, строку
с оригинальным содержимым лексемы в первом элементе и номером строки во втором элементе.
Пример #1 token_get_all() example
<?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 в обычном файле.
Пример #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
.