PHP - Tokenizer token_get_all() 函数



PHP Tokenizer 的 token_get_all() 函数用于将给定的源代码拆分为 PHP 令牌。可以使用 Zend 引擎的词法扫描器将给定的源字符串解析为 PHP 语言令牌。对于解析器令牌的列表,我们可以使用 token_name() 函数将令牌值转换为其字符串表示形式。

语法

以下是 PHP Tokenizer 的 token_get_all() 函数的语法:

array token_get_all(string $code, int $flags = 0)

参数

以下是 token_get_all() 函数的参数:

  • $code − 它是要进行标记化的 PHP 代码字符串。

  • $flags − 它是有效的标志,例如 - TOKEN_PARSE。

返回值

token_get_all() 函数返回一个令牌标识符数组。每个单独的令牌标识符要么是一个单个字符(例如:;,.,>,!等),要么是一个包含三个元素的数组,其中元素 0 中包含令牌索引,元素 1 中包含原始令牌的字符串内容,以及元素 2 中包含行号。

PHP 版本

token_get_all() 函数最初在 PHP 4.2.0 的核心 PHP 中引入,并在 PHP 5、PHP 7 和 PHP 8 中继续轻松运行。

示例 1

首先,我们将向您展示 PHP Tokenizer token_get_all() 函数的基本示例,以打印每个令牌及其行号和名称。

<?php
   // Tokenize the PHP code
   $tokens = token_get_all("<?php echo; ?>");

   // Loop over each token
   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 代码(也包括注释)进行标记化,并打印每个令牌及其行号和名称。

<?php
   // Tokenize the PHP code
   $tokens = token_get_all("/* comment */");

   // Loop over each token
   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 */')

示例 3

此示例演示如何将 token_get_all() 与 TOKEN_PARSE 标志一起使用来标记化 PHP 代码并为发生的任何解析错误提供令牌。

<?php
   // Define a block of PHP code
   $source = <<<"code"
   <?php
   class A {
      const PUBLIC = 1;
   }
   code;

   // Tokenize the PHP code
   $tokens = token_get_all($source, TOKEN_PARSE);

   // Loop over each token
   foreach($tokens as $token) {
      if(is_array($token)) {
         echo token_name($token[0]) , PHP_EOL;
      }
   }
?> 

输出

这将创建以下输出:

T_OPEN_TAG
T_CLASS
T_WHITESPACE
T_STRING
T_WHITESPACE
T_WHITESPACE
T_CONST
T_WHITESPACE
T_STRING
T_WHITESPACE
T_WHITESPACE
T_LNUMBER
T_WHITESPACE

示例 4

在以下示例中,我们使用 token_get_all() 函数从 PHP 代码中提取所有字符串文字。

<?php
   // Define a block of PHP code
   $code = '<?php echo "Hello, world!"; $str = "Tutorialspoint"; ?>';
   $tokens = token_get_all($code);
   
   $strings = [];
   foreach ($tokens as $token) {
       if (is_array($token) && $token[0] === T_CONSTANT_ENCAPSED_STRING) {
           $strings[] = $token[1];
       }
   }
   
   print_r($strings);
?> 

输出

执行上述程序时,它将产生以下输出:

Array
(
    [0] => "Hello, world!"
    [1] => "Tutorialspoint"
)
php_function_reference.htm
广告