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 令牌的符号名称。 |