(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
token_get_all — Scinde un code source en éléments de base
$code
, int $flags
= 0): array
token_get_all() analyse la chaîne donnée
source
en utilisant l'analyseur lexical du moteur Zend.
Pour une liste des tokens, voir Liste des jetons de l'analyseur, ou utilisez la fonction token_name() pour traduire une valeur token dans une représentation sous forme de chaîne de caractères.
code
Le source PHP à analyser.
flags
Drapeaux valides :
TOKEN_PARSE
- Reconnait la possibilité d'utiliser
les mots réservés dans des contextes spécifiques.
Un tableau contenant la liste des descriptions des éléments. Chaque élément
du tableau peut être un caractère unique (i.e.: ;
,
.
, >
, !
, etc.),
ou un tableau contenant un identifiant de token dans l'élément 0,
la représentation textuelle originale de ce token dans l'élément 1,
et le numéro de la ligne dans l'élément 2.
Exemple #1 Exemple avec 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;
}
}
?>
Résultat de l'exemple ci-dessus est similaire à :
Line 1: T_OPEN_TAG ('<?php ') Line 1: T_ECHO ('echo') Line 1: T_WHITESPACE (' ') Line 1: T_CLOSE_TAG ('?>')
Exemple #2 Exemple d'utilisation incorrecte de la fonction token_get_all()
<?php
$tokens = token_get_all('/* commentaire */');
foreach ($tokens as $token) {
if (is_array($token)) {
echo "Ligne {$token[2]} : ", token_name($token[0]), " ('{$token[1]}')", PHP_EOL;
}
}
?>
Résultat de l'exemple ci-dessus est similaire à :
Ligne 1 : T_INLINE_HTML ('/* comment */')
T_INLINE_HTML
plutôt que T_COMMENT
,
ce qui aurait pu être attendu. Ceci est dû au fait qu'aucune balise ouvrante n'a été
utilisée dans le code fourni. Cela correspond à mettre une commentaire en dehors
des balises PHP dans un fichier classique.
Exemple #3 token_get_all() dans une classe en utilisant un mot réservé
<?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;
}
}
?>
Résultat de l'exemple ci-dessus est similaire à :
T_OPEN_TAG T_WHITESPACE T_CLASS T_WHITESPACE T_STRING T_CONST T_WHITESPACE T_STRING T_LNUMBER
TOKEN_PARSE
, le pénultième jeton
(T_STRING
) aurait du être
T_PUBLIC
.