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

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 (int) abstract Абстракция класса
T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG (int) & Объявления типов, токен доступен с PHP 8.1.0
T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG (int) & Объявления типов, токен доступен с PHP 8.1.0
T_AND_EQUAL (int) &= Операторы присваивания
T_ARRAY (int) array() Конструкция array(), синтаксис массива
T_ARRAY_CAST (int) (array) Приведение типов
T_AS (int) as Конструкция foreach
T_ATTRIBUTE (int) #[ Атрибуты, доступны с PHP 8.0.0
T_BAD_CHARACTER (int)   ASCII-символы с кодовыми точками ниже 32, за исключением символов \t (0x09), \n (0x0a) и \r (0x0d); токен доступен с PHP 7.4.0
T_BOOLEAN_AND (int) && Логические операторы
T_BOOLEAN_OR (int) || Логические операторы
T_BOOL_CAST (int) (bool) или (boolean) Приведение типов
T_BREAK (int) break Инструкция break
T_CALLABLE (int) callable Значение с типом callable
T_CASE (int) case Выражение switch
T_CATCH (int) catch Исключения
T_CLASS (int) class Классы и объекты
T_CLASS_C (int) __CLASS__ Магические константы
T_CLONE (int) clone Классы и объекты
T_CLOSE_TAG (int) ?> или %> PHP-код внутри HTML-разметки
T_COALESCE (int) ?? Операторы сравнения
T_COALESCE_EQUAL (int) ??= Операторы присваивания, токен доступен с PHP 7.4.0
T_COMMENT (int) // или #, и /* */ Комментарии
T_CONCAT_EQUAL (int) .= Операторы присваивания
T_CONST (int) const Константы класса
T_CONSTANT_ENCAPSED_STRING (int) "foo" или 'bar' Строковый синтаксис
T_CONTINUE (int) continue Инструкция continue
T_CURLY_OPEN (int) {$ Расширенная интерполяция переменной в строке
T_DEC (int) -- Операторы инкремента и декремента
T_DECLARE (int) declare Конструкция declare
T_DEFAULT (int) default Выражение switch
T_DIR (int) __DIR__ Магические константы
T_DIV_EQUAL (int) /= Операторы присваивания
T_DNUMBER (int) 0.12 и т. д. Числа с плавающей точкой
T_DO (int) do Цикл do..while
T_DOC_COMMENT (int) /** */ PHPDoc-комментарии
T_DOLLAR_OPEN_CURLY_BRACES (int) ${ Базовая интерполяция переменной в строке
T_DOUBLE_ARROW (int) => Синтаксис массивов
T_DOUBLE_CAST (int) (real), (double) или (float) Приведение типов
T_DOUBLE_COLON (int) :: Смотрите описание токена T_PAAMAYIM_NEKUDOTAYIM ниже
T_ECHO (int) echo Конструкция echo
T_ELLIPSIS (int) ... Аргументы функции
T_ELSE (int) else Инструкция else
T_ELSEIF (int) elseif Инструкция elseif
T_EMPTY (int) empty Конструкция empty()
T_ENCAPSED_AND_WHITESPACE (int) " $a" Константная часть строки с переменными
T_ENDDECLARE (int) enddeclare Конструкция declare, альтернативный синтаксис
T_ENDFOR (int) endfor Цикл for, альтернативный синтаксис
T_ENDFOREACH (int) endforeach Конструкция foreach, альтернативный синтаксис
T_ENDIF (int) endif Инструкция if, альтернативный синтаксис
T_ENDSWITCH (int) endswitch Инструкция switch, альтернативный синтаксис
T_ENDWHILE (int) endwhile Цикл while, альтернативный синтаксис
T_ENUM (int) enum Перечисления, доступны с PHP 8.1.0
T_END_HEREDOC (int)   Синтаксис heredoc
T_EVAL (int) eval() Конструкция eval()
T_EXIT (int) exit или die Функции exit() и die()
T_EXTENDS (int) extends Ключевое слово extends, классы и объекты
T_FILE (int) __FILE__ Магические константы
T_FINAL (int) final Ключевое слово final
T_FINALLY (int) finally Исключения
T_FN (int) fn Стрелочные функции, доступны с PHP 7.4.0
T_FOR (int) for Цикл for
T_FOREACH (int) foreach Конструкция foreach
T_FUNCTION (int) function Функции
T_FUNC_C (int) __FUNCTION__ Магические константы
T_GLOBAL (int) global Область видимости переменной
T_GOTO (int) goto Оператор goto
T_HALT_COMPILER (int) __halt_compiler() Функция __halt_compiler
T_IF (int) if Конструкция if
T_IMPLEMENTS (int) implements Интерфейсы объектов
T_INC (int) ++ Операторы инкремента и декремента
T_INCLUDE (int) include Выражение include
T_INCLUDE_ONCE (int) include_once Выражение include_once
T_INLINE_HTML (int)   Текст вне PHP-кода
T_INSTANCEOF (int) instanceof Оператор проверки типа
T_INSTEADOF (int) insteadof Трейты
T_INTERFACE (int) interface Интерфейсы объектов
T_INT_CAST (int) (int) или (integer) Приведение типов
T_ISSET (int) isset() Конструкция isset()
T_IS_EQUAL (int) == Операторы сравнения
T_IS_GREATER_OR_EQUAL (int) >= Операторы сравнения
T_IS_IDENTICAL (int) === Операторы сравнения
T_IS_NOT_EQUAL (int) != или <> Операторы сравнения
T_IS_NOT_IDENTICAL (int) !== Операторы сравнения
T_IS_SMALLER_OR_EQUAL (int) <= Операторы сравнения
T_LINE (int) __LINE__ Магические константы
T_LIST (int) list() Конструкция list()
T_LNUMBER (int) 123, 012, 0x1ac и т.д. Целые числа
T_LOGICAL_AND (int) and Логические операторы
T_LOGICAL_OR (int) or Логические операторы
T_LOGICAL_XOR (int) xor Логические операторы
T_MATCH (int) match Выражение match, доступно с PHP 8.0.0
T_METHOD_C (int) __METHOD__ Магические константы
T_MINUS_EQUAL (int) -= Операторы присваивания
T_MOD_EQUAL (int) %= Операторы присваивания
T_MUL_EQUAL (int) *= Операторы присваивания
T_NAMESPACE (int) namespace Пространства имён
T_NAME_FULLY_QUALIFIED (int) \App\Namespace Пространства имён, токен доступен с PHP 8.0.0
T_NAME_QUALIFIED (int) App\Namespace Пространства имён, токен доступен с PHP 8.0.0
T_NAME_RELATIVE (int) namespace\Namespace Пространства имён, токен доступен с PHP 8.0.0
T_NEW (int) new Классы и объекты
T_NS_C (int) __NAMESPACE__ Пространства имён
T_NS_SEPARATOR (int) \ Пространства имён
T_NUM_STRING (int) "$a[0]" Цифровой индекс массива внутри строки
T_OBJECT_CAST (int) (object) Приведение типов
T_OBJECT_OPERATOR (int) -> Классы и объекты
T_NULLSAFE_OBJECT_OPERATOR (int) ?-> Классы и объекты
T_OPEN_TAG (int) <?php, <? или <% PHP-код внутри HTML-разметки
T_OPEN_TAG_WITH_ECHO (int) <?= или <%= PHP-код внутри HTML-разметки
T_OR_EQUAL (int) |= Операторы присваивания
T_PAAMAYIM_NEKUDOTAYIM (int) :: Оператор разрешения области видимости. Токен определяется также с именем T_DOUBLE_COLON
T_PIPE |> функциональные операторы (доступен с PHP 8.5.0)
T_PLUS_EQUAL (int) += Операторы присваивания
T_POW (int) ** Арифметические операторы
T_POW_EQUAL (int) **= Операторы присваивания
T_PRINT (int) print Конструкция print
T_PRIVATE (int) private Классы и объекты
T_PRIVATE_SET (int) private(set) Хуки свойств, доступны с PHP 8.4.0
T_PROPERTY_C (int) __PROPERTY__ Магические константы
T_PROTECTED (int) protected Классы и объекты
T_PROTECTED_SET (int) protected(set) Хуки свойств, доступны с PHP 8.4.0
T_PUBLIC (int) public Классы и объекты
T_PUBLIC_SET (int) public(set) Хуки свойств, доступны с PHP 8.4.0
T_READONLY (int) readonly Классы и объекты (доступно с PHP 8.1.0)
T_REQUIRE (int) require Выражение require
T_REQUIRE_ONCE (int) require_once Выражение require_once
T_RETURN (int) return Возвращаемые значения
T_SL (int) << Побитовые операторы
T_SL_EQUAL (int) <<= Операторы присваивания
T_SPACESHIP (int) <=> Операторы сравнения
T_SR (int) >> Побитовые операторы
T_SR_EQUAL (int) >>= Операторы присваивания
T_START_HEREDOC (int) <<< Синтаксис heredoc
T_STATIC (int) static Область видимости переменной
T_STRING (int) parent, self и т. п. Идентификаторы наподобие ключевых слов parent и self, названия функций, классов и некоторые другие. Смотрите также описание токена T_CONSTANT_ENCAPSED_STRING
T_STRING_CAST (int) (string) Приведение типов
T_STRING_VARNAME (int) "${a Интерполяция переменной переменной в строке
T_SWITCH (int) switch Инструкция switch
T_THROW (int) throw Исключения
T_TRAIT (int) trait Трейты
T_TRAIT_C (int) __TRAIT__ Константа __TRAIT__
T_TRY (int) try Исключения
T_UNSET (int) unset() Конструкция unset()
T_UNSET_CAST (int) (unset) Приведение типов
T_USE (int) use Пространства имён
T_VAR (int) var Классы и объекты
T_VARIABLE (int) $foo переменные
T_VOID_CAST (void) приведение к void (доступен с PHP 8.5.0)
T_WHILE (int) while Циклы while, do..while
T_WHITESPACE (int) \t \r\n  
T_XOR_EQUAL (int) ^= Операторы присваивания
T_YIELD (int) yield Генераторы
T_YIELD_FROM (int) yield from Генераторы

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

Добавить

Примечания пользователей 2 notes

up
7
nathan at unfinitydesign dot com
17 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
2
daniel_rhodes at yahoo dot co dot uk
2 years 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}
To Top