PHP Unconference Europe 2015

Lista de componentes léxicos del analizador

Algunas partes del lenguaje PHP son representadas internamente por tipos como T_SR. PHP produce identificadores como este a la hora de analizar errores, como "Parse error: unexpected T_SR, expecting ',' or ';' in script.php on line 10." ("Error de análisis: T_SR inesperado, se esperaba ',' o ';' en script.php en la línea 10.")

Se supone que uno debería saber lo qué significa T_SR. Para todo aquél que no lo sepa, se muestra una tabla con dichos identificadores, la sintaxis de PHP y referencias al apartado apropiado del manual.

Nota: Uso de las constantes T_*

Todos los componentes léxicos (o tokens) enumerados abajo también están definidos como constantes de PHP. Sus valores son automáticamente generados basándose en la infraestructura del analizador subyacente de PHP. Esto significa que el valor concreto de un componenete léxico puede cambiar entre dos versiones de PHP. Por ejemplo, la constante T_FILE es 365 en PHP 5.3, mientras que el mismo valor se refiere ahora a T_TRAIT en PHP 5.4, y el valor de T_FILE es 369. Esto sigifica que el código no debería nunca depender directamente de los valores originales de las constantes T_* tomadas de la versión X.Y.Z de PHP, para proporcionar cierta compatibildad entre múltiples versiones PHP. En su lugar, el código debería utilizar valores personalizados (usando números grandes como 10000) y una estrategia apropiada que funcione tanto con las versiones de PHP como con los valores de las constantes T_*.

Componente léxico
Elemento Sintaxis Referencia
T_ABSTRACT abstract Abstracción de clases (disponible desde PHP 5.0.0)
T_AND_EQUAL &= operadores de asignación
T_ARRAY array() array(), sintaxis de array
T_ARRAY_CAST (array) conversión de tipos
T_AS as foreach
T_BAD_CHARACTER   todo lo que haya por debajo de ASCII 32 excepto \t (0x09), \n (0x0a) y \r (0x0d)
T_BOOLEAN_AND && operadores lógios
T_BOOLEAN_OR || operadores lógicos
T_BOOL_CAST (bool) o (boolean) conversión de tipos
T_BREAK break break
T_CALLABLE callable callable
T_CASE case switch
T_CATCH catch Excepciones (disponible desde PHP 5.0.0)
T_CHARACTER   ya no se utiliza
T_CLASS class clases y objetos
T_CLASS_C __CLASS__ constantes mágicas
T_CLONE clone clases y objetos
T_CLOSE_TAG ?> o %> salir de HTML
T_COMMENT // o #, y /* */ comentarios
T_CONCAT_EQUAL .= operadores de asignación
T_CONST const constantes
T_CONSTANT_ENCAPSED_STRING "foo" o 'bar' sintaxis de string
T_CONTINUE continue continue
T_CURLY_OPEN {$ sintaxis compleja
T_DEC -- operadores de incremento/decremento
T_DECLARE declare declare
T_DEFAULT default switch
T_DIR __DIR__ constantes mágicas (disponible desde PHP 5.3.0)
T_DIV_EQUAL /= operadores de asignación
T_DNUMBER 0.12, etc. números de punto flotante
T_DOC_COMMENT /** */ comentarios tipo PHPDoc
T_DO do do..while
T_DOLLAR_OPEN_CURLY_BRACES ${ sintaxis compleja
T_DOUBLE_ARROW => sintaxis de array
T_DOUBLE_CAST (real), (double) o (float) conversión de tipos
T_DOUBLE_COLON :: véase T_PAAMAYIM_NEKUDOTAYIM más abajo
T_ECHO echo echo
T_ELSE else else
T_ELSEIF elseif elseif
T_EMPTY empty empty()
T_ENCAPSED_AND_WHITESPACE " $a" parte constante de un string con variables
T_ENDDECLARE enddeclare declare, sintaxis alternativa
T_ENDFOR endfor for, sintaxis alternativa
T_ENDFOREACH endforeach foreach, sintaxis alternativa
T_ENDIF endif if, sintaxis alternativa
T_ENDSWITCH endswitch switch, sintaxis alternativa
T_ENDWHILE endwhile while, sintaxis alternativa
T_END_HEREDOC   sintaxis de heredoc
T_EVAL eval() eval()
T_EXIT exit o die exit(), die()
T_EXTENDS extends extends, clases y objetos
T_FILE __FILE__ constantes mágicas
T_FINAL final Palabra clave Final
T_FINALLY finally Excepciones (disponible desde PHP 5.5.0)
T_FOR for for
T_FOREACH foreach foreach
T_FUNCTION function o cfunction funciones
T_FUNC_C __FUNCTION__ constantes mágicas
T_GLOBAL global ámbito de las variables
T_GOTO goto (disponible desde PHP 5.3.0)
T_HALT_COMPILER __halt_compiler() __halt_compiler (disponible desde PHP 5.1.0)
T_IF if if
T_IMPLEMENTS implements Interfaces de objetos
T_INC ++ operadores de incremento/decremento
T_INCLUDE include() include
T_INCLUDE_ONCE include_once() include_once
T_INLINE_HTML   texto fuera de PHP
T_INSTANCEOF instanceof operadores de tipo
T_INSTEADOF insteadof Traits (disponible desde PHP 5.4.0)
T_INT_CAST (int) o (integer) conversión de tipos
T_INTERFACE interface Interfaces de objetos
T_ISSET isset() isset()
T_IS_EQUAL == operadores de comparación
T_IS_GREATER_OR_EQUAL >= operadores de comparación
T_IS_IDENTICAL === operadores de comparación
T_IS_NOT_EQUAL != o <> operadores de comparación
T_IS_NOT_IDENTICAL !== operadores de comparación
T_IS_SMALLER_OR_EQUAL <= operadores de comparación
T_LINE __LINE__ constantes mágicas
T_LIST list() list()
T_LNUMBER 123, 012, 0x1ac, etc. números enteros
T_LOGICAL_AND and operadores lógicos
T_LOGICAL_OR or operadores lógicos
T_LOGICAL_XOR xor operadores lógicos
T_METHOD_C __METHOD__ constantes mágicas
T_MINUS_EQUAL -= operadores de asignación
T_MOD_EQUAL %= operadores de asignación
T_MUL_EQUAL *= operadores de asignación
T_NAMESPACE namespace espacios de nombres (disponible desde PHP 5.3.0)
T_NS_C __NAMESPACE__ espacios de nombres (disponible desde PHP 5.3.0)
T_NS_SEPARATOR \ espacios de nombres (disponible desde PHP 5.3.0)
T_NEW new clases y objectos
T_NUM_STRING "$a[0]" array de índice numérico dentro de un string
T_OBJECT_CAST (object) conversión de tipos
T_OBJECT_OPERATOR -> clases y objetos
T_OPEN_TAG <?php, <? o <% salir de HTML
T_OPEN_TAG_WITH_ECHO <?= o <%= salir de HTML
T_OR_EQUAL |= operadores de asignación
T_PAAMAYIM_NEKUDOTAYIM :: ::. También se define como T_DOUBLE_COLON.
T_PLUS_EQUAL += operadores de asignación
T_PRINT print() print
T_PRIVATE private clases y objetos
T_PUBLIC public clases y objetos
T_PROTECTED protected clases y objetos
T_REQUIRE require() require
T_REQUIRE_ONCE require_once() require_once
T_RETURN return valores de retorno
T_SL << operadores a nivel de bits
T_SL_EQUAL <<= operadores de asignación
T_SR >> operadores a nivel de bits
T_SR_EQUAL >>= operadores de asignación
T_START_HEREDOC <<< sintaxis de heredoc
T_STATIC static ámbito de las variables
T_STRING parent, self, etc. se comparan identificadores, p.ej. palabras clave como parent y self, nombres de funciones, nombres de clases y más. Véase también T_CONSTANT_ENCAPSED_STRING.
T_STRING_CAST (string) conversión de tipos
T_STRING_VARNAME "${a sintaxis compleja
T_SWITCH switch switch
T_THROW throw Excepciones
T_TRAIT trait Traits (disponible desde PHP 5.4.0)
T_TRAIT_C __TRAIT__ __TRAIT__ (disponible desde PHP 5.4.0)
T_TRY try Excepciones
T_UNSET unset() unset()
T_UNSET_CAST (unset) conversión de tipos
T_USE use espacios de nombres (disponible desde PHP 5.3.0; reservada desde PHP 4.0.0)
T_VAR var clases y objetos
T_VARIABLE $foo variables
T_WHILE while while, do..while
T_WHITESPACE \t \r\n  
T_XOR_EQUAL ^= operadores de asignación
T_YIELD yield generadores (disponible desde PHP 5.5.0)

Véase también token_name().

add a note add a note

User Contributed Notes 2 notes

up
3
nathan at unfinitydesign dot com
6 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
0
fgm at osinet dot fr
6 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