token_get_all
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
token_get_all — Divide um dado fonte em tokens do PHP
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
.