(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
token_get_all — 将提供的源码按 PHP 标记进行分割
token_get_all() 解析提供的 code
源码字符,然后使用 Zend 引擎的语法分析器获取源码中的 PHP 语言的解析器记号。
解析器记号列表见解析器记号(token)列表,或者使用 token_name() 翻译获取这个记号的字符串表示。
记号标识符数组。每个单独的记号标识符要么是单个字符(即 ;
、.
、>
、!
等),要么是有三个元素的数组,其中元素 0 是记号索引,元素 1 是原始记号的字符串内容和元素 2 是行号。
示例 #1 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;
}
}
?>
以上示例的输出类似于:
Line 1: T_OPEN_TAG ('<?php ') Line 1: T_ECHO ('echo') Line 1: T_WHITESPACE (' ') Line 1: T_CLOSE_TAG ('?>')
示例 #2 token_get_all() 错误用法示例
<?php
$tokens = token_get_all('/* comment */');
foreach ($tokens as $token) {
if (is_array($token)) {
echo "Line {$token[2]}: ", token_name($token[0]), " ('{$token[1]}')", PHP_EOL;
}
}
?>
以上示例的输出类似于:
Line 1: T_INLINE_HTML ('/* comment */')
T_INLINE_HTML
而不是预期的
T_COMMENT
。这是因为在提供的代码中没有使用开放标记。这相当于在普通文件中将注释放在 PHP 标记之外。
示例 #3 token_get_all() 在类上使用关键词示例
<?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;
}
}
?>
以上示例的输出类似于:
T_OPEN_TAG T_WHITESPACE T_CLASS T_WHITESPACE T_STRING T_CONST T_WHITESPACE T_STRING T_LNUMBER
TOKEN_PARSE
flag,倒数第二个记号(T_STRING
)将是 T_PUBLIC
。