解析器令牌列表

PHP 语言的各个部分在内部由令牌表示。包含无效令牌序列的代码段可能会导致错误,例如 Parse error: syntax error, unexpected token "==", expecting "(" in script.php on line 10.,其中令牌 == 在内部由 T_IS_EQUAL 表示。

下表列出了所有令牌。它们也可以用作 PHP 常量。

注意: T_* 常量的使用

T_* 常量的值是根据 PHP 的底层解析器基础设施自动生成的。这意味着令牌的具体值可能在两个 PHP 版本之间发生变化。这意味着您的代码永远不应该直接依赖于从 PHP 版本 X.Y.Z 获取的原始 T_* 值,以提供跨多个 PHP 版本的兼容性。

要在跨多个 PHP 版本中使用 T_* 常量,用户可以定义未定义的常量(使用像 10000 这样的大数字),并采用适合 PHP 版本和 T_* 值的策略。

<?php
// 在 PHP 7.4.0 之前,T_FN 未定义。
defined('T_FN') || define('T_FN', 10001);

令牌
令牌 语法 参考
T_ABSTRACT abstract 类抽象
T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG & 类型声明 (从 PHP 8.1.0 开始可用)
T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG & 类型声明 (从 PHP 8.1.0 开始可用)
T_AND_EQUAL &= 赋值运算符
T_ARRAY array() array()数组语法
T_ARRAY_CAST (array) 类型转换
T_AS as foreach
T_ATTRIBUTE #[ 属性 (从 PHP 8.0.0 开始可用)
T_BAD_CHARACTER   除 \t (0x09)、\n (0x0a) 和 \r (0x0d) 外的任何小于 ASCII 32 的字符(从 PHP 7.4.0 开始可用)
T_BOOLEAN_AND && 逻辑运算符
T_BOOLEAN_OR || 逻辑运算符
T_BOOL_CAST (bool) 或 (boolean) 类型转换
T_BREAK break break
T_CALLABLE callable callable
T_CASE case switch
T_CATCH catch 异常
T_CLASS class 类和对象
T_CLASS_C __CLASS__ 魔术常量
T_CLONE clone 类和对象
T_CLOSE_TAG ?> 或 %> 从 HTML 中转义
T_COALESCE ?? 比较运算符
T_COALESCE_EQUAL ??= 赋值运算符 (从 PHP 7.4.0 开始可用)
T_COMMENT // 或 #,以及 /* */ 注释
T_CONCAT_EQUAL .= 赋值运算符
T_CONST const 类常量
T_CONSTANT_ENCAPSED_STRING "foo" 或 'bar' 字符串语法
T_CONTINUE continue continue
T_CURLY_OPEN {$ 复杂变量解析语法
T_DEC -- 递增/递减运算符
T_DECLARE declare declare
T_DEFAULT default switch
T_DIR __DIR__ 魔术常量
T_DIV_EQUAL /= 赋值运算符
T_DNUMBER 0.12 等等 浮点数
T_DO do do..while
T_DOC_COMMENT /** */ PHPDoc 风格注释
T_DOLLAR_OPEN_CURLY_BRACES ${ 复杂变量解析语法
T_DOUBLE_ARROW => 数组语法
T_DOUBLE_CAST (real)、(double) 或 (float) 类型转换
T_DOUBLE_COLON :: 参见下面的 T_PAAMAYIM_NEKUDOTAYIM
T_ECHO echo echo
T_ELLIPSIS ... 函数参数
T_ELSE else else
T_ELSEIF elseif elseif
T_EMPTY empty empty()
T_ENCAPSED_AND_WHITESPACE " $a" 包含变量的字符串的常量部分
T_ENDDECLARE enddeclare declare替代语法
T_ENDFOR endfor for替代语法
T_ENDFOREACH endforeach foreach替代语法
T_ENDIF endif if替代语法
T_ENDSWITCH endswitch switch替代语法
T_ENDWHILE endwhile while替代语法
T_ENUM enum 枚举 (从 PHP 8.1.0 开始可用)
T_END_HEREDOC   heredoc 语法
T_EVAL eval() eval()
T_EXIT exit 或 die exit()die()
T_EXTENDS extends extends类和对象
T_FILE __FILE__ 魔术常量
T_FINAL final Final 关键字
T_FINALLY finally 异常
T_FN fn 箭头函数 (从 PHP 7.4.0 开始可用)
T_FOR for for
T_FOREACH foreach foreach
T_FUNCTION function 函数
T_FUNC_C __FUNCTION__ 魔术常量
T_GLOBAL global 变量作用域
T_GOTO goto goto
T_HALT_COMPILER __halt_compiler() __halt_compiler
T_IF if if
T_IMPLEMENTS implements 对象接口
T_INC ++ 递增/递减运算符
T_INCLUDE include include
T_INCLUDE_ONCE include_once include_once
T_INLINE_HTML   PHP 外部的文本
T_INSTANCEOF instanceof 类型运算符
T_INSTEADOF insteadof Traits
T_INTERFACE interface 对象接口
T_INT_CAST (int) 或 (integer) 类型转换
T_ISSET isset() isset()
T_IS_EQUAL == 比较运算符
T_IS_GREATER_OR_EQUAL >= 比较运算符
T_IS_IDENTICAL === 比较运算符
T_IS_NOT_EQUAL != 或 <> 比较运算符
T_IS_NOT_IDENTICAL !== 比较运算符
T_IS_SMALLER_OR_EQUAL <= 比较运算符
T_LINE __LINE__ 魔术常量
T_LIST list() list()
T_LNUMBER 123、012、0x1ac 等等 整数
T_LOGICAL_AND and 逻辑运算符
T_LOGICAL_OR or 逻辑运算符
T_LOGICAL_XOR xor 逻辑运算符
T_MATCH match match (从 PHP 8.0.0 开始可用)
T_METHOD_C __METHOD__ 魔术常量
T_MINUS_EQUAL -= 赋值运算符
T_MOD_EQUAL %= 赋值运算符
T_MUL_EQUAL *= 赋值运算符
T_NAMESPACE namespace 命名空间
T_NAME_FULLY_QUALIFIED \App\Namespace 命名空间 (从 PHP 8.0.0 开始可用)
T_NAME_QUALIFIED App\Namespace 命名空间 (从 PHP 8.0.0 开始可用)
T_NAME_RELATIVE namespace\Namespace 命名空间 (从 PHP 8.0.0 开始可用)
T_NEW new 类和对象
T_NS_C __NAMESPACE__ 命名空间
T_NS_SEPARATOR \ 命名空间
T_NUM_STRING "$a[0]" 字符串内的数字数组索引
T_OBJECT_CAST (object) 类型转换
T_OBJECT_OPERATOR -> 类和对象
T_NULLSAFE_OBJECT_OPERATOR ?-> 类和对象
T_OPEN_TAG <?php、<? 或 <% 从 HTML 中转义
T_OPEN_TAG_WITH_ECHO <?= 或 <%= 从 HTML 中转义
T_OR_EQUAL |= 赋值运算符
T_PAAMAYIM_NEKUDOTAYIM :: ::。也定义为 T_DOUBLE_COLON
T_PLUS_EQUAL += 赋值运算符
T_POW ** 算术运算符
T_POW_EQUAL **= 赋值运算符
T_PRINT print print
T_PRIVATE private 类和对象
T_PROTECTED protected 类和对象
T_PUBLIC public 类和对象
T_READONLY readonly 类和对象 (从 PHP 8.1.0 开始可用)
T_REQUIRE require require
T_REQUIRE_ONCE require_once require_once
T_RETURN return 返回值
T_SL << 按位运算符
T_SL_EQUAL <<= 赋值运算符
T_SPACESHIP <=> 比较运算符
T_SR >> 按位运算符
T_SR_EQUAL >>= 赋值运算符
T_START_HEREDOC <<< heredoc 语法
T_STATIC static 变量作用域
T_STRING parent、self 等等 标识符,例如 parentself 等关键字、函数名、类名等等。另请参见 T_CONSTANT_ENCAPSED_STRING
T_STRING_CAST (string) 类型转换
T_STRING_VARNAME "${a 复杂变量解析语法
T_SWITCH switch switch
T_THROW throw 异常
T_TRAIT trait Traits
T_TRAIT_C __TRAIT__ __TRAIT__
T_TRY try 异常
T_UNSET unset() unset()
T_UNSET_CAST (unset) 类型转换
T_USE use 命名空间
T_VAR var 类和对象
T_VARIABLE $foo 变量
T_WHILE while whiledo..while
T_WHITESPACE \t \r\n  
T_XOR_EQUAL ^= 赋值运算符
T_YIELD yield 生成器
T_YIELD_FROM yield from 生成器

另请参阅 token_name()

添加注释

用户贡献的注释 3 个注释

2
daniel_rhodes at yahoo dot co dot uk
4 个月前
在上面的 Token 表格中,值得注意的是,“自 PHP x.y.z 起可用”的括号文本可以指代两种含义之一:

[] 此 *解析器标记* 自 PHP x.y.z 起可用
{例如,T_BAD_CHARACTER、T_NAME_QUALIFIED}

[] 此 *语言特性* 自 PHP x.y.z 起可用
{例如,T_ATTRIBUTE、T_COALESCE_EQUAL}
7
nathan at unfinitydesign dot com
15 年前
T_ENCAPSED_AND_WHITESPACE 是与一组标记相交的空白。例如,以下代码会产生“意外的 T_ENCAPSED_AND_WHITESPACE”错误:

<?php
$main_output_world
= 'snakes!';
echo(
'There are' 10 $main_output_world);
?>

请注意,两个字符串之间缺少连接运算符会导致上述空白错误。连接运算符指示 PHP 忽略两个代码标记(即所谓的“封装”数据)之间的空白,而不是将它解析为一个标记本身。

正确的代码应该是:

<?php
$main_output_world
= 'snakes!';
echo(
'There are' . 10 . $main_output_world);
?>

请注意在每个标记之间添加了连接运算符。
-3
fgm at osinet dot fr
15 年前
解析包含已评估内容的字符串时会返回 T_ENCAPSED_AND_WHITESPACED,例如“some $value”,或者来自字符串引用页面的以下示例:

<?php
echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some
{$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>

最后一个示例被标记为:
T_ECHO
echo
T_WHITESPACE
%20 (空格字符)
T_START_HEREDOC
<<
T_ENCAPSED_AND_WHITESPACE
My name is "
T_VARIABLE
$name
T_ENCAPSED_AND_WHITESPACE
". I am printing some
T_VARIABLE
$foo
T_OBJECT_OPERATOR
->
T_STRING
foo
T_ENCAPSED_AND_WHITESPACE
. Now, I am printing some
T_CURLY_OPEN
{
T_VARIABLE
$foo
T_OBJECT_OPERATOR
->
T_STRING
bar
(终止符)
[
T_LNUMBER
1
(终止符)
]
(终止符)
}
T_ENCAPSED_AND_WHITESPACE
. This should print a capital 'A': \x41
T_END_HEREDOC
EOT
(终止符)
;
To Top