Forum und email

Tokenizer Funktionen

Einführung

Die Tokenizer-Funktionen bieten eine Schnittstelle zum in PHP integrierten PHP-Tokenizer der Zend-Engine. Mit Hilfe dieser Funktionen ist es möglich ein eigenes Werkzeug zur PHP-Quelltextanalyse oder -modifikation zu entwickeln. Der Umgang mit der Sprachspezifikation auf lexikalischer Ebene wird nicht benötigt.

Siehe auch Anhang zu Tokens.

Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.

Installation

Seit PHP 4.3.0 sind diese Funktionen standardmäßig aktiviert. Für ältere Versionen muß PHP mit der Option --enable-tokenizer konfiguriert und kompiliert werden. Die Unterstützung kann mit der Option --disable-tokenizer deaktiviert werden.

Die Windowsversion von PHP enthält diese Erweiterung. Um diese Funktionen zu verwenden, müssen Sie keine zusätzlichen Erweiterungen aktivieren.

Hinweis: Ab PHP 4.3.0 stehen die Funktionen standardmäßig zur Verfügung.

Vordefinierte Konstanten

Sobald die Erweiterung mit PHP kompiliert wurde oder dynamisch zur Laufzeit geladen wurde, stehen die im List of Parser Tokens aufgelisteten Tokens als Konstanten zur Verfügung.

Beispiele

Folgend ein einfaches Beispiel, dass den Tokenizer verwendet um eine PHP-Datei einzulesen, alle Kommentare zu entfernen und den reinen Quelltext auszugeben.

Example#1 Kommentar mit Hilfe des Tokenizers entfernen

<?php
/*
 * T_ML_COMMENT steht in PHP 5 nicht zur Verfügung.
 * Die folgenden drei Zeilen definieren die Konstante
 * um Abwärtskompatibilität zu gewährleisten.
 *
 * Die nächsten zwei Zeilen definieren die nur in PHP 5
 * verfügbare Konstante T_DOC_COMMENT, die für PHP 4
 * mit T_ML_COMMENT maskiert wird.
 */
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)) {
        
// einfaches 1-Zeichen Token
        
echo $token;
    } else {
        
// Token Array
        
list($id$text) = $token;
 
        switch (
$id) { 
            case 
T_COMMENT
            case 
T_ML_COMMENT// wir haben diese
            
case T_DOC_COMMENT// und diese Konstante definiert
                // Kommentare ignorieren
                
break;

            default:
                
// alle anderen -> unverändert beibehalten
                
echo $text;
                break;
        }
    }
}
?>

Inhaltsverzeichnis

  • token_get_all — Spaltet angegebenen PHP-Quelltext in PHP-Tokens auf
  • token_name — Gibt Bezeichner für ein PHP-Token zurück