在上面的權杖表格中,值得注意的是,括號中的文字「從 PHP x.y.z 起可用」可能有兩種含義
[] 此 *剖析器權杖* 從 PHP x.y.z 起可用
{例如 T_BAD_CHARACTER、T_NAME_QUALIFIED}
[] 此 *語言功能* 從 PHP x.y.z 起可用
{例如 T_ATTRIBUTE、T_COALESCE_EQUAL}
PHP 語言的各個部分在內部以標記表示。包含無效標記序列的程式碼片段可能會導致錯誤,例如 剖析錯誤:語法錯誤,非預期標記 "==",期望 "(" 在 script.php 的第 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
我的名字是 "$name". 我正在印出一些 $foo->foo.
現在,我正在印出一些 {$foo->bar[1]}.
這應該印出一個大寫字母 'A': \x41
EOT;
?>
最後這個範例的標記化結果如下:
T_ECHO
echo
T_WHITESPACE
%20(一個空格字元)
T_START_HEREDOC
<<
T_ENCAPSED_AND_WHITESPACE
我的名字是 "
T_VARIABLE
$name
T_ENCAPSED_AND_WHITESPACE
". 我正在印出一些
T_VARIABLE
$foo
T_OBJECT_OPERATOR
->
T_STRING
foo
T_ENCAPSED_AND_WHITESPACE
. 現在,我正在印出一些
T_CURLY_OPEN
{
T_VARIABLE
$foo
T_OBJECT_OPERATOR
->
T_STRING
bar
(終端)
[
T_LNUMBER
1
(終端)
]
(終端)
}
T_ENCAPSED_AND_WHITESPACE
. 這應該印出一個大寫字母 'A': \x41
T_END_HEREDOC
EOT
(終端)
;