PHP Conference Nagoya 2025

解析器记号(token)列表

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 版本中使用 T_* 常量,用户可以对 PHP 版本和 T_* 值使用适当的策略(使用类似 10000 的大数),来定义未定义的常量。

<?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 Trait
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 != or <> 比较运算符
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_PRIVATE_SET private(set) 属性挂钩(自 PHP 8.4.0 起可用)
T_PROPERTY_C __PROPERTY__ 魔术常量
T_PROTECTED protected 类和对象
T_PROTECTED_SET protected(set) 属性挂钩(自 PHP 8.4.0 起可用)
T_PUBLIC public 类和对象
T_PUBLIC_SET public(set) 属性挂钩(自 PHP 8.4.0 起可用)
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 Trait
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 notes

up
2
daniel_rhodes at yahoo dot co dot uk
8 months ago
In the above table of Tokens, it's worth noting that the bracketed text of "available as of PHP x.y.z" can mean one of two things:

[] This *parser token* is available as of PHP x.y.z
{eg. T_BAD_CHARACTER, T_NAME_QUALIFIED}

[] This *language feature* is available as of PHP x.y.z
{eg. T_ATTRIBUTE, T_COALESCE_EQUAL}
up
7
nathan at unfinitydesign dot com
16 years ago
T_ENCAPSED_AND_WHITESPACE is whitespace which intersects a group of tokens. For example, an "unexpected T_ENCAPSED_AND_WHITESPACE" error is produced by the following code:

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

Note the missing concatenation operator between the two strings leads to the whitespace error that is so named above. The concatenation operator instructs PHP to ignore the whitespace between the two code tokens (the so named "encapsed" data"), rather than parse it as a token itself.

The correct code would be:

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

Note the addition of the concatenation operator between each token.
up
-3
fgm at osinet dot fr
16 years ago
T_ENCAPSED_AND_WHITESPACED is returned when parsing strings with evaluated content, like "some $value" or this example from the Strings reference page:

<?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;
?>

This last example is tokenized as:
T_ECHO
echo
T_WHITESPACE
%20 (a space character)
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
(terminal)
[
T_LNUMBER
1
(terminal)
]
(terminal)
}
T_ENCAPSED_AND_WHITESPACE
. This should print a capital 'A': \x41
T_END_HEREDOC
EOT
(terminal)
;
To Top