在上表中,值得注意的是,“自 PHP x.y.z 版本起可用”的括号文本可能表示两种含义之一
[] 此 *解析器标记* 自 PHP x.y.z 版本起可用
{例如,T_BAD_CHARACTER、T_NAME_QUALIFIED}
[] 此 *语言特性* 自 PHP x.y.z 版本起可用
{例如,T_ATTRIBUTE、T_COALESCE_EQUAL}
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);
另请参阅 token_name()。
在上表中,值得注意的是,“自 PHP x.y.z 版本起可用”的括号文本可能表示两种含义之一
[] 此 *解析器标记* 自 PHP x.y.z 版本起可用
{例如,T_BAD_CHARACTER、T_NAME_QUALIFIED}
[] 此 *语言特性* 自 PHP x.y.z 版本起可用
{例如,T_ATTRIBUTE、T_COALESCE_EQUAL}
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);
?>
请注意每个标记之间添加了连接运算符。
在解析包含已评估内容的字符串时,例如“some $value”或字符串参考页面中的此示例,将返回 T_ENCAPSED_AND_WHITESPACED
<?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
(终端)
;