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
廣告