在上面的 Token 表格中,值得注意的是,“自 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()。
在上面的 Token 表格中,值得注意的是,“自 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);
?>
请注意在每个标记之间添加了连接运算符。
解析包含已评估内容的字符串时会返回 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
(终止符)
;