token_get_all

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

token_get_allDivide um dado fonte em tokens do PHP

Descrição

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

token_get_all() analisa o code fornecido em tokens da linguagem PHP usando o avaliador léxico do Zend engine.

Para uma lista dos tokens do avaliador, veja Lista de Tokens do Parser, ou use token_name() para traduzir um valor de um token para sua representação em formato string.

Parâmetros

code

O código-fonte do PHP à ser avaliado.

flags

Flags válidas:

  • TOKEN_PARSE - Reconhece a capacidade de usar palavras reservadas em contextos específicos.

Valor Retornado

Um array de identificadores de tokens. Cada identificador de token individual ou é um caracter único (ex.: ;, ., >, !, etc...), ou um array com três elementos contendo o índice do token no elemento 0, a string contendo o token original no elemento 1 e o número da linha no elemento 2.

Exemplos

Exemplo #1 Exemplo de token_get_all()

<?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;
}
}
?>

O exemplo acima produzirá algo semelhante a:

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

Exemplo #2 Exemplo de uso incorreto de token_get_all()

<?php
$tokens
= token_get_all('/* comment */');

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

O exemplo acima produzirá algo semelhante a:

Line 1: T_INLINE_HTML ('/* comment */')
Observe no exemplo anterior que a string é analisada como T_INLINE_HTML em vez do esperado T_COMMENT. Isso ocorre porque nenhuma tag aberta foi usada no código fornecido. Isso seria equivalente a colocar um comentário fora da tag PHP em um arquivo normal.

Exemplo #3 token_get_all() em uma classe usando um exemplo de palavra reservada

<?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;
}
}
?>

O exemplo acima produzirá algo semelhante a:

T_OPEN_TAG
T_WHITESPACE
T_CLASS
T_WHITESPACE
T_STRING
T_CONST
T_WHITESPACE
T_STRING
T_LNUMBER
Sem a flag TOKEN_PARSE, o penúltimo token (T_STRING) teria sido T_PUBLIC.

Veja Também