CXXVI. Funções de Tokenizer

Introdução

As funções de tokenizer formam uma interface para o tokenizer do PHP imbutido no Engine Zend. Usando essas funções você pode escrever ferramentas próprias para análise e modificação de código PHP sem ter que lidar com a especificação da linguagem em um nível léxico.

Veja também o apêndice sobre tokens.

Dependências

Nenhuma biblioteca externa é necessária para compilar esta extensão.

Instalação

Começando no PHP 4.3.0, essas funções estão habilitadas a menos que seja dito o contrário. Para versões anteriores, você tem que configurar e compilar o PHP com --enable-tokenizer. Você pode desabilitar suporte à extensão tokenizer com --disable-tokenizer.

A versão para Windows do PHP tem suporte embutido para esta extensão. Você não precisa carregar nenhuma extensão adicional para utilizar essas funções.

Nota: Suporte integrado para tokenizer está disponível a partir do PHP 4.3.0.

Constantes pré-definidas

As contantes abaixo são definidas por esta extensão e somente estarão disponíveis quando a extensão foi compilada com o PHP ou carregada dinamicamente durante a execução.

T_INCLUDE (inteiro)

T_INCLUDE_ONCE (inteiro)

T_EVAL (inteiro)

T_REQUIRE (inteiro)

T_REQUIRE_ONCE (inteiro)

T_LOGICAL_OR (inteiro)

T_LOGICAL_XOR (inteiro)

T_LOGICAL_AND (inteiro)

T_PRINT (inteiro)

T_PLUS_EQUAL (inteiro)

T_MINUS_EQUAL (inteiro)

T_MUL_EQUAL (inteiro)

T_DIV_EQUAL (inteiro)

T_CONCAT_EQUAL (inteiro)

T_MOD_EQUAL (inteiro)

T_AND_EQUAL (inteiro)

T_OR_EQUAL (inteiro)

T_XOR_EQUAL (inteiro)

T_SL_EQUAL (inteiro)

T_SR_EQUAL (inteiro)

T_BOOLEAN_OR (inteiro)

T_BOOLEAN_AND (inteiro)

T_IS_EQUAL (inteiro)

T_IS_NOT_EQUAL (inteiro)

T_IS_IDENTICAL (inteiro)

T_IS_NOT_IDENTICAL (inteiro)

T_IS_SMALLER_OR_EQUAL (inteiro)

T_IS_GREATER_OR_EQUAL (inteiro)

T_SL (inteiro)

T_SR (inteiro)

T_INC (inteiro)

T_DEC (inteiro)

T_INT_CAST (inteiro)

T_DOUBLE_CAST (inteiro)

T_STRING_CAST (inteiro)

T_ARRAY_CAST (inteiro)

T_OBJECT_CAST (inteiro)

T_BOOL_CAST (inteiro)

T_UNSET_CAST (inteiro)

T_NEW (inteiro)

T_EXIT (inteiro)

T_IF (inteiro)

T_ELSEIF (inteiro)

T_ELSE (inteiro)

T_ENDIF (inteiro)

T_LNUMBER (inteiro)

T_DNUMBER (inteiro)

T_STRING (inteiro)

T_STRING_VARNAME (inteiro)

T_VARIABLE (inteiro)

T_NUM_STRING (inteiro)

T_INLINE_HTML (inteiro)

T_CHARACTER (inteiro)

T_BAD_CHARACTER (inteiro)

T_ENCAPSED_AND_WHITESPACE (inteiro)

T_CONSTANT_ENCAPSED_STRING (inteiro)

T_ECHO (inteiro)

T_DO (inteiro)

T_WHILE (inteiro)

T_ENDWHILE (inteiro)

T_FOR (inteiro)

T_ENDFOR (inteiro)

T_FOREACH (inteiro)

T_ENDFOREACH (inteiro)

T_DECLARE (inteiro)

T_ENDDECLARE (inteiro)

T_AS (inteiro)

T_SWITCH (inteiro)

T_ENDSWITCH (inteiro)

T_CASE (inteiro)

T_DEFAULT (inteiro)

T_BREAK (inteiro)

T_CONTINUE (inteiro)

T_OLD_FUNCTION (inteiro)

T_OLD_FUNCTION não é definida no PHP 5.

T_FUNCTION (inteiro)

T_CONST (inteiro)

T_RETURN (inteiro)

T_USE (inteiro)

T_GLOBAL (inteiro)

T_STATIC (inteiro)

T_VAR (inteiro)

T_UNSET (inteiro)

T_ISSET (inteiro)

T_EMPTY (inteiro)

T_CLASS (inteiro)

T_EXTENDS (inteiro)

T_OBJECT_OPERATOR (inteiro)

T_DOUBLE_ARROW (inteiro)

T_LIST (inteiro)

T_ARRAY (inteiro)

T_LINE (inteiro)

T_FILE (inteiro)

T_COMMENT (inteiro)

T_ML_COMMENT (inteiro)

T_ML_COMMENT não é definida no PHP 5. Todos os comentários no PHP 5 são tokens de T_COMMENT.

T_DOC_COMMENT (inteiro)

T_DOC_COMMENT foi introduzido no PHP 5.

T_OPEN_TAG (inteiro)

T_OPEN_TAG_WITH_ECHO (inteiro)

T_CLOSE_TAG (inteiro)

T_WHITESPACE (inteiro)

T_START_HEREDOC (inteiro)

T_END_HEREDOC (inteiro)

T_DOLLAR_OPEN_CURLY_BRACES (inteiro)

T_CURLY_OPEN (inteiro)

T_PAAMAYIM_NEKUDOTAYIM (inteiro)

T_DOUBLE_COLON (inteiro)

T_INTERFACE (inteiro)

Apenas no PHP 5.

T_IMPLEMENTS (inteiro)

Apenas no PHP 5.

T_CLASS_C (inteiro)

Apenas no PHP 5.

T_FUNC_C (inteiro)

Apenas no PHP 5.

T_METHOD_C (inteiro)

Apenas no PHP 5.

T_ABSTRACT (inteiro)

Apenas no PHP 5.

T_CATCH (inteiro)

Apenas no PHP 5.

T_FINAL (inteiro)

Apenas no PHP 5.

T_INSTANCEOF (inteiro)

Apenas no PHP 5.

T_PRIVATE (inteiro)

Apenas no PHP 5.

T_PROTECTED (inteiro)

Apenas no PHP 5.

T_PUBLIC (inteiro)

Apenas no PHP 5.

T_THROW (inteiro)

Apenas no PHP 5.

T_TRY (inteiro)

Apenas no PHP 5.

T_CLONE (inteiro)

Apenas no PHP 5.

Exemplos

Aqui está um exemplo simples de scripts PHP usando o tokenizer que lerá um arquivo PHP, retirará todos os comentários do fonte e imprimirá apenas o código puro.

Exemplo 1. Retira os comentários com o tokenizer

<?php
/*
* T_ML_COMMENT não existe no PHP 5.
* As três linhas seguintes definem ela para
* preservar compatibilidade com versões anteriores.
*
* As duas linhas seguintes definem T_DOC_COMMENT que existe apenas no PHP 5,
* que nós chamaremos como T_ML_COMMENT para o PHP 4.
*/
if (!defined('T_ML_COMMENT')) {
    
define('T_ML_COMMENT', T_COMMENT);
} else {
    
define('T_DOC_COMMENT', T_ML_COMMENT);
}

$source = file_get_contents('example.php');
$tokens = token_get_all($source);

foreach (
$tokens as $token) {
    if (
is_string($token)) {
        
// token simples de 1 caracter
        
echo $token;
    } else {
        
// array de tokens
        
list($id, $text) = $token;

        switch (
$id) {
            case
T_COMMENT:
            case
T_ML_COMMENT: // Nós definimos essa
            
case T_DOC_COMMENT: // e essa
                // não faz nada com os comentários
                
break;

            default:
                
// Qualquer outra coisa, imprime como é
                
echo $text;
                break;
        }
    }
}
?>
Índice
token_get_all -- Divide um dado fonte em tokens do PHP
token_name -- Pega o nome simbólico de um dado token do PHP