token_get_all

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

token_get_allSpaltet angegebenen PHP-Quelltext in PHP-Tokens auf

Beschreibung

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

token_get_all() parst den angegebenen Quelltext source und spaltet ihn mit Hilfe des lexikalischen Scanners der Zend-Engine in PHP-Sprachtokens auf.

Eine Übersicht über die verschiedenen Tokens finden Sie im Liste der Parsertoken oder Sie können die Funktion token_name() zum Übersetzen eines Tokens in seinen Textrepäsentanten verwenden.

Parameter-Liste

source

PHP-Quelltext der geparst werden soll.

flags

Gültige Flags:

  • TOKEN_PARSE - Erkennt die Möglichkeit, reservierte Wörter unter bestimmten Umständen zu verwenden.

Rückgabewerte

Array mit Tokenbezeichner. Jeder einzelne Bezeichner ist entweder ein einzelnes Zeichen (z.B.: ;, ., >, !, usw.), oder ein Array bestehend aus drei Elementen. Das erste Element enthält den Tokenindex, das zweite Element den originalen Textinhalt und die Zeilennummer im dritten Element.

Changelog

Version Beschreibung
7.0.0 Der optionale flags Parameter wurde mitsamt dem TOKEN_PARSE-Flag hinzugefügt.
5.2.2 Die Zeilennummer wird im dritten Element zurückgegeben

Beispiele

Beispiel #1 token_get_all() Beispiel

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

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

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

Beispiel #2 Fehlerhaftes token_get_all() Verwendungsbeispiel

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

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

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Zeile 1: T_INLINE_HTML ('/* comment */')
Es ist zu beachten, dass im vorigen Beispiel die Zeichenkette als T_INLINE_HTML und nicht wie erwartet als T_COMMENT geparst wurde. Das liegt am fehlenden Start-Tag im verwendeten Code. Das entspricht einem Kommentar außerhalb der PHP-Tags in einer normalen Datei.

Beispiel #3 token_get_all() für eine Klasse, die ein reserviertes Wort benutzt

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

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

T_OPEN_TAG
T_WHITESPACE
T_CLASS
T_WHITESPACE
T_STRING
T_CONST
T_WHITESPACE
T_STRING
T_LNUMBER
Ohne das TOKEN_PARSE-Flag würde das vorletzte Token T_PUBLIC statt T_STRING sein.

Siehe auch