PHP espera T_PAAMAYIM_NEKUDOTAYIM?

543

¿Alguien tiene un T_PAAMAYIM_NEKUDOTAYIM?

Peter Turner
fuente
22
A veces, esta es la forma en que PHP te dice que te falta un signo $ ... por ejemplo, si escribes _SESSION ["foo"] en lugar de $ _SESSION ["foo"]
Gonzo
131
hebreo para doble colon doble, pero ... vea bugs.php.net/bug.php?id=14492 : "Por cierto, hay un error de ortografía en el error de análisis, debería ser T_PAAMAYIM_NEKUDATAYIM (en hebreo, el 'doble' la forma es solo el sustantivo original + el sufijo 'ayim' y 'nekuda' es la forma única ['nekudot' es la forma plural]) ".
Wolfgang Fahl
66
@WolfgangFahl Sabía que algo sobre ese error parecía estar mal.
Peter Turner
14
@WolfgangFahl el error ortográfico es solo el que falta u. Debería ser T_PAAMAYIM_NEKUDOTAYIM. ( PAAMAYIM= "dos veces", NEKUDOTAYIM= := "נקודותיים")
Tom
15
Cuando vi este error, me quedé mirando la pantalla estupefacta durante unos 30 segundos, luego me eché a reír y fui a fumar un cigarrillo: F 1+
n00b

Respuestas:

343

Es el operador de dos puntos ::(ver lista de tokens de analizador ).

Gumbo
fuente
11
Realmente no. Pruebe estovar_dump(empty(TRUE))
machineaddict
1
@machineaddict ¿Pregunta / respuesta incorrecta?
Gumbo
2
No. Acabo de agregar una evaluación que devuelve el mismo T_PAAMAYIM_NEKUDOTAYIM. Lo encontré por error.
machineaddict
66
@Web_Developer, la razón que sucede es porque si tiene un foreach($cats as catúnico carácter aceptable después catde que una declaración sintácticamente válida es a ::, ya que le permitiría especificar una propiedad estática de alguna clase llamada cat. Por ejemplo, si la catclase tiene un miembro público estático llamado $mouse, entonces foreach($cats as cat::$mouse)es perfectamente válido php, pero una declaración con cualquier otra cosa que no sea ::después catsería un error de sintaxis. Si $mouseno fuera una propiedad declarada de catusted obtendría un error fatal, pero aún así no un error de sintaxis.
chiliNUT
2
var_dump (vacío (VERDADERO)), solo devuelve bool (falso) en PHP 7.2
Programador Dancuk
109

Google hace maravillas.

Es hebreo para "doble colon".

patricksweeney
fuente
3
@ MattiVirkkunen ¿Qué pasa con un nuevo idioma que acepta cualquier error, confirmaciones, sintaxis en cualquier idioma? :) podemos hacerlo.
Héctor
2
Google me trajo aquí.
Sumit
2
los israelíes escribieron php :)
sd1sd1
@ sd1sd1, sí, probablemente fue Zeev quien escribió eso
peterchaula
53

Es un nombre para el ::operador en PHP. Literalmente significa "doble colon". Por alguna razón lo nombraron en hebreo. Verifique la sintaxis de su código y ponga un ::lugar apropiado :-)

Ilya Birman
fuente
1
Las funciones están en inglés, pero ese error está en hebreo. Sin embargo, no estoy seguro de si hay otros errores en hebreo.
alex
19
La cadena de resaltado es להדגיש מחרוזת. De ahora en adelante, solo usaré mi función personalizada array_push לדחוף_מערך en caracteres hebreos, por supuesto. Estoy seguro de que a todos mis compañeros de trabajo que no hablan hebreo les encantará. Casi todo nuestro equipo de desarrollo habla al menos un idioma escrito en caracteres no latinos. Debería ser divertido :)
Isaac
3
La razón por la que está en hebreo es porque el código fue escrito por israelíes. No creo que se hayan perdido ese error. Lo dejaron allí sin traducir como recordatorio.
Raúl
55
@Raul Ok, así que en mi próximo proyecto escribiré un código de error en italiano, ¡soy italiano! ¿Qué esperas, inglés en todas partes? :-)
Gianluca Ghettini
@Ilya Birman No significa literalmente "doble colon"; literalmente significa "dos veces, puntos dobles"
Sapphire_Brick
47

De Wikipedia :

En PHP, el operador de resolución de alcance también se llama Paamayim Nekudotayim (en hebreo: פעמיים נקודתיים), que significa "doble colon" en hebreo.

El nombre "Paamayim Nekudotayim" se introdujo en el Zend Engine 0.5 desarrollado en Israel que se usa en PHP 3. Aunque ha sido confuso para muchos desarrolladores que no hablan hebreo, todavía se usa en PHP 5, como en este mensaje de error de muestra :

$ php -r :: Error de análisis: error de sintaxis, inesperado T_PAAMAYIM_NEKUDOTAYIM

A partir de PHP 5.4, los mensajes de error relacionados con el operador de resolución de alcance todavía incluyen este nombre, pero han aclarado un poco su significado:

$ php -r :: Error de análisis: error de sintaxis, inesperado '::' (T_PAAMAYIM_NEKUDOTAYIM)

De la documentación oficial de PHP :

El Operador de resolución de alcance (también llamado Paamayim Nekudotayim) o, en términos más simples, los dos puntos dobles, es un token que permite el acceso a propiedades o métodos estáticos, constantes y anulados de una clase.

Cuando haga referencia a estos elementos desde fuera de la definición de clase, use el nombre de la clase.

A partir de PHP 5.3.0, es posible hacer referencia a la clase utilizando una variable. El valor de la variable no puede ser una palabra clave (por ejemplo, self, parent y static).

Paamayim Nekudotayim, al principio, parecería una elección extraña para nombrar un doble punto. Sin embargo, al escribir Zend Engine 0.5 (que funciona con PHP 3), así es como el equipo de Zend decidió llamarlo. En realidad significa dos puntos dobles, ¡en hebreo!

John Slegers
fuente
1
En realidad es hebreo coloquial. Wikipedia ahora dice: "En PHP, el operador de resolución de alcance también se llama Paamayim Nekudotayim (en hebreo: פעמיים נקודותיים, pronunciado [paʔaˈmajim nəkudoˈtajim], la segunda palabra una corrupción coloquial de נקודתיים, que se pronuncia [nəkudaˈtajim], que significa [nəkudaˈtajim doble]) "En hebreo".
micrófono
11

Esto también se produce cuando aplica una constante en PHP a la función empty ():

if (!empty(SOME_CONSTANT)) {

}

Ese fue mi caso. Lo resolví usando esto:

$string = SOME_CONSTANT;
if (!empty($string)) {

}
Max
fuente
2
¿Por qué una constante estaría vacía?
No entre en pánico el
1
Buena pregunta: Esto es solo, por ejemplo, si alguien más se metió en esta situación de error, solo muestro que también será posible :)
Max
66
@ No se asuste: ¿Por qué no? empty () no solo prueba si existe una variable, sino también si su valor está "vacío" (en el caso de PHP, un cero (0) también está vacío). Dicha constante podría representar un valor que debe cambiar un usuario, como la configuración de la base de datos o algunos valores verdaderos / falsos y otros tipos de valores que el desarrollador del código no conoce en tiempo de diseño. Esto es común para las API o los marcos de código. Simplemente no entiendo por qué los desarrolladores del analizador Zend no usaron una palabra común que todos conocen y entienden, sino algunas palabras hebreas. Quiero decir, ni siquiera es realmente divertido o algo así.
StanE
Uso constantes en los archivos de configuración, y quiero saber en el código si una constante específica está vacía (nulo, falso, 0, cadena vacía, matriz de vacío ...). ¿Debo probar contra todos ellos manualmente? WTF
qdev
6

Sé bastante bien el hebreo, así que para aclarar el nombre "Paamayim Nekudotayim" para usted, el significado parafraseado es "doble colon", pero traducido literalmente:

  • "Paamayim" significa "dos" o "dos veces"
  • "Nekudotayim" significa "puntos" (literalmente, "agujeros")
    • En el idioma hebreo, una nekuda significa un punto.
    • El plural es nekudot , es decir, puntos que actúan como las vocales en inglés.
    • La razón por la que se llama Nekudo- tayim es porque el sufijo "-ayim" también significa "dos" o "dos veces", pero generalmente significa dos objetos en lugar de dos acciones, por lo tanto ::denota "dos veces, dos puntos" o más comúnmente conocido como el Operador de resolución de alcance .
Zafiro_Brick
fuente
2

Esto puede suceder en foreachs cuando se usa:

foreach( $array as $key = $value )

en vez de

foreach( $array as $key => $value )
GDY
fuente
1

Para mí esto sucedió dentro de una función de clase.

En PHP 5.3 y superior $this::$defaults funcionó bien; cuando cambié el código en un servidor que, por cualquier razón, tenía un número de versión inferior, arrojó este error.

La solución, en mi caso, fue usar la palabra clave en selflugar de $this:

self::$defaults funciona bien

bozdoz
fuente
¿Le pregunte acerca $this, o lo que le pasó a usted ?
Sapphire_Brick