2024 年 PHP Conference Japan

剖析器標記列表

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

詞彙類型 (Tokens)
詞彙類型 (Token) 語法 參考
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   任何 ASCII 32 以下的字元,除了 \t (0x09)、\n (0x0a) 和 \r (0x0d) (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 列舉 (Enums)(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_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 特性 (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 則註釋

daniel_rhodes at yahoo dot co dot uk
8 個月前
在上面的權杖表格中,值得注意的是,括號中的文字「從 PHP x.y.z 起可用」可能有兩種含義

[] 此 *剖析器權杖* 從 PHP x.y.z 起可用
{例如 T_BAD_CHARACTER、T_NAME_QUALIFIED}

[] 此 *語言功能* 從 PHP x.y.z 起可用
{例如 T_ATTRIBUTE、T_COALESCE_EQUAL}
nathan at unfinitydesign dot com
16 年前
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);
?>

請注意在每個權杖之間添加了串接運算子。
fgm at osinet dot fr
16 年前
解析包含評估內容的字串時,例如 "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
(終端)
;
To Top