(PHP 4 >= 4.2.0, PHP 5, PHP 7)
token_get_all — Spaltet angegebenen PHP-Quelltext in PHP-Tokens auf
$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.
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.
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.
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 |
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 */')
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($source, TOKEN_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
TOKEN_PARSE
-Flag würde das vorletzte Token
T_PUBLIC
statt T_STRING
sein.