token_get_all

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

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

Описание

array token_get_all ( string $source [, int $flags = 0 ] )

Функция token_get_all() разбирает переданную строку source в языковые лексемы PHP используя лексический сканер Zend Engine.

Список лексем смотрите в Список меток (tokens) парсера, или используйте token_name() для перевода значения лексемы в строковое представление.

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

source

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

flags

Корректные флаги:

  • TOKEN_PARSE - Признает возможность использовать зарезервированные слова в определенных контекстах.

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

Массив идентификаторов лексем. Каждый индивидуальный идентификатор лексемы это или одиночный символ (например, ;, ., >, !, другие...), или трехэлементный массив, содержащий индекс лексемы в нулевом элементе, строку с оригинальным содержимым лексемы в первом элементе и номером строки во втором элементе.

Список изменений

Версия Описание
7.0.0 Добавлен необязательный параметр flags, который может принимать значение TOKEN_PARSE.
5.2.2 Номера строк возвращаются в элементе 2.

Примеры

Пример #1 token_get_all() example

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

foreach (
$tokens as $token) {
    if (
is_array($token)) {
        echo 
"Line {$token[2]}: "token_name($token[0]), " ('{$token[1]}')"PHP_EOL;
    }
}
?>

Результатом выполнения данного примера будет что-то подобное:

Line 1: T_OPEN_TAG ('<?php ')
Line 1: T_ECHO ('echo')
Line 1: T_WHITESPACE (' ')
Line 1: T_CLOSE_TAG ('?>')

Пример #2 Пример неправильного использования token_get_all()

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

foreach (
$tokens as $token) {
    if (
is_array($token)) {
        echo 
"Line {$token[2]}: "token_name($token[0]), " ('{$token[1]}')"PHP_EOL;
    }
}
?>

Результатом выполнения данного примера будет что-то подобное:

Line 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($sourceTOKEN_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.

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

  • token_name() - Возвращает символьное имя для переданной PHP-лексемы