PHP 8.4.2 Released!

Список токенов парсера

PHP-код внутренне представляется токенами. Фрагмент кода, который содержит недопустимую последовательность токенов, приводит к ошибкам наподобие Parse error: syntax error, unexpected token "==", expecting "(" in script.php on line 10.", где токен == внутренне представляется как T_IS_EQUAL.

Следующая таблица перечисляет все токены. Токены также доступны как PHP-константы.

Замечание: Константы семейства T_*

Значения констант семейства T_* автоматически генерируются на основе базовой инфраструктуры синтаксического анализатора PHP. Поэтому конкретное значение токена иногда изменяется между двумя версиями PHP. И поэтому для совместимости между версиями PHP код пишут так, чтобы он не зависел от исходных значений констант семейства T_*, которые взяли из версии PHP X.Y.Z.

Пользователи определяют неопределённые константы семейства T_* значениями больших чисел наподобие 10_000, чтобы использовать константы в разных версиях PHP. При этом выбирают стратегию, которая будет работать как с версиями PHP, в которых разработчики языка определили значения констант семейства T_*, так и с версиями PHP, в которых константы не определяли.

<?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(), синтаксис массива
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 ?> или %> PHP-код внутри 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 Перечисления, доступны с 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 Трейты
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, <? или <% PHP-код внутри HTML-разметки
T_OPEN_TAG_WITH_ECHO <?= или <%= PHP-код внутри 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 и т. п. Идентификаторы наподобие ключевых слов parent и self, названия функций, классов и некоторые другие. Смотрите также описание токена T_CONSTANT_ENCAPSED_STRING
T_STRING_CAST (string) Приведение типов
T_STRING_VARNAME "${a Интерполяция переменной переменной в строке
T_SWITCH switch Инструкция switch
T_THROW throw Исключения
T_TRAIT trait Трейты
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 Циклы while, do..while
T_WHITESPACE \t \r\n  
T_XOR_EQUAL ^= Операторы присваивания
T_YIELD yield Генераторы
T_YIELD_FROM yield from Генераторы

Смотрите также описание функции token_name().

Добавить

Примечания пользователей 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