PHP - tokenizer 函数


PHP Tokenizer 是一个内置的 PHP 扩展,它将 PHP 源代码标记化(或划分)为单独的标记。之后,可以检查和修改这些令牌。它对于创建代码转换和分析工具非常有用。

Tokenizer 函数可以为 Zend Engine 中嵌入的 PHP Tokenizer 提供接口。通过使用这些函数,我们可以编写自己的 PHP 源代码分析或修改工具,而无需在词法级别处理语言规范。

安装

Tokenizer 扩展通常随 PHP 一起提供,并默认启用。如果您使用的是常规的 PHP 安装,则无需执行任何进一步的作。

要检查 Tokenizer 是否已启用,请生成包含以下内容的 PHP 文件(例如,phpinfo.php),并使用 Web 服务器访问它 -


<?php
   phpinfo();
?> 

并检查输出中的 Tokenizer 部分。

配置

Tokenizer 扩展不需要任何进一步的配置。它与 PHP 的默认配置一起开箱即用。

预定义常量

当扩展编译为 PHP 或在运行时动态加载时,解析器令牌列表 的标记被指定为常量。

常量 描述
TOKEN_PARSE (int) 识别在给定上下文中使用保留术语的能力。

PhpToken 类

PhpToken 类 -

Token 描述
PhpToken::__construct 创建新的 PhpToken 对象。
PhpToken::getTokenName 返回令牌的名称。
PhpToken::is 检查令牌是否为给定类型。
PhpToken::isIgnorable 检查 PHP 解析器是否会忽略令牌。
PhpToken::__toString 返回令牌的文本内容。
PhpToken::tokenize 将给定的源拆分为 PHP 令牌,由 PhpToken 对象表示。

示例


<?php
   if (!defined('T_ML_COMMENT')) {
      define('T_ML_COMMENT', T_COMMENT);
   } else {
      define('T_DOC_COMMENT', T_ML_COMMENT);
   }

   $source = file_get_contents('example.php');
   $tokens = token_get_all($source);

   foreach($tokens as $token) {
      if(is_string($token)) {
         //  简单 1-character token
         echo $token;
      } else {
         //  token 数组
         list($id, $text) = $token;
         switch ($id) { 
            case T_COMMENT: 
            case T_ML_COMMENT: // 我们已经定义了这个
            case T_DOC_COMMENT: // 和这个
            
            //  对评论不采取行动
            break;

            default:
               //  其他内容->按“原样”输出
               echo $text;
               break;
         }
      }
   }
?>

PhpToken 类函数

函数 描述
token_get_all() 将给定的源拆分为 PHP 令牌。
token_name() 可以获取给定 PHP 令牌的符号名称。