ConFoo 2025

パーサトークンの一覧

PHP 言語の種々の部分は、内部的に トークン で表現されています。 不正なトークンのシーケンスが含まれるコードスニペットの場合、 Parse error: syntax error, unexpected token "==", expecting "(" in script.php on line 10." のようなエラーが発生します。 この場合、トークン == が内部的に T_IS_EQUAL として表現されています。

以下の表に、全てのトークンの一覧を示します。 これらは、全て PHP の定数としても利用できます。

注意: 定数 T_* の使いかた

T_* (T_ で始まる) 定数は、 PHP のベースとなるパーサ基盤に基づいて自動生成されます。 つまり、トークンの具体的な値は、PHP のバージョンが違えば変わる可能性があるということです。 つまり、バージョン間で互換性を保つためには、 コードの中では決して 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(), 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) or (boolean) 型キャスト
T_BREAK break break
T_CALLABLE callable callable
T_CASE case switch
T_CATCH catch 例外(exceptions)
T_CLASS class クラスとオブジェクト
T_CLASS_C __CLASS__ マジック定数
T_CLONE clone クラスとオブジェクト
T_CLOSE_TAG ?> or %> HTML からの脱出
T_COALESCE ?? 比較演算子
T_COALESCE_EQUAL ??= NULL合体代入演算子 (PHP 7.4.0 以降で利用可能)
T_COMMENT // or #, and /* */ コメント
T_CONCAT_EQUAL .= 代入演算子
T_CONST const クラス定数
T_CONSTANT_ENCAPSED_STRING "foo" or '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, etc. 浮動小数点数
T_DO do do..while
T_DOC_COMMENT /** */ PHPDoc 形式のコメント
T_DOLLAR_OPEN_CURLY_BRACES ${ 単純な 変数の文字列補間
T_DOUBLE_ARROW => array 構文
T_DOUBLE_CAST (real), (double) or (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 Enumerations (PHP 8.1.0 以降で利用可能)
T_END_HEREDOC   ヒアドキュメント構文
T_EVAL eval() eval()
T_EXIT exit or die exit(), die()
T_EXTENDS extends extends, クラスとオブジェクト
T_FILE __FILE__ マジック定数
T_FINAL final finalキーワード
T_FINALLY finally 例外(exceptions)
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 トレイト
T_INTERFACE interface オブジェクト インターフェイス
T_INT_CAST (int) or (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, etc. 整数
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, <? or <% HTML からのエスケープ
T_OPEN_TAG_WITH_ECHO <?= or <%= escaping from 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_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 <<< ヒアドキュメント構文
T_STATIC static 変数のスコープ
T_STRING parent, self, etc. 識別子。たとえば parentself といったオブジェクト指向のキーワード、そして関数名やクラス名などにマッチします。 T_CONSTANT_ENCAPSED_STRING も参照ください。
T_STRING_CAST (string) 型キャスト
T_STRING_VARNAME "${a 可変変数 の文字列補間
T_SWITCH switch switch
T_THROW throw 例外(exceptions)
T_TRAIT trait トレイト
T_TRAIT_C __TRAIT__ __TRAIT__
T_TRY try 例外(exceptions)
T_UNSET unset() unset()
T_UNSET_CAST (unset) 型キャスト
T_USE use 名前空間
T_VAR var クラスとオブジェクト
T_VARIABLE $foo 変数
T_WHILE while while, do..while
T_WHITESPACE \t \r\n  
T_XOR_EQUAL ^= 代入演算子
T_YIELD yield ジェネレータ
T_YIELD_FROM yield from ジェネレータ

token_name() も参照ください。

add a note

User Contributed Notes 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