PHP espera T_PAAMAYIM_NEKUDOTAYIM?
-
09-09-2019 - |
Pregunta
¿Alguien tiene una T_PAAMAYIM_NEKUDOTAYIM
?
Solución
Es el operador de dos puntos dobles ::
(ver lista de tokens analizador ).
Otros consejos
Es un nombre para el operador ::
en PHP. Literalmente significa "dos puntos dobles". Por alguna razón le dieron el nombre en hebreo. Compruebe la sintaxis del código, y poner un ::
en su caso: -)
En PHP, el operador de resolución de alcance también se llama Paamayim Nekudotayim (en hebreo: פעמיים נקודתיים), que significa “dos puntos dobles” en Hebreo.
El nombre "Paamayim Nekudotayim" se introdujo en el Israel y desarrollado Zend Engine 0.5 usado en PHP 3. A pesar de que ha sido confundiendo a muchos desarrolladores que no hablan hebreo, sigue siendo siendo utilizado en PHP 5, como en este mensaje de error de ejemplo:
error de sintaxis, inesperada:$ -r :: Error de análisis php T_PAAMAYIM_NEKUDOTAYIM
A partir de PHP 5.4, mensajes de error en relación con el operador de resolución de alcance Todavía incluyen este nombre, pero han aclarado su significado algo:
r $ php :: Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)
la documentación de PHP oficial :
El Operador de Resolución (también llamado Paamayim Nekudotayim) o en términos más simples, el doble de colon, es un símbolo que permite el acceso a propiedades estáticas, constantes, y sobrescritos o métodos de una clase.
Al hacer referencia a estos elementos de fuera de la definición de clase, el uso 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 propio, del padre y estática).
Paamayim Nekudotayim sería, en principio, parecer una elección extraña para nombrar un doble colon. Sin embargo, al escribir el Zend Engine 0.5 (Que PHP 3 poderes), eso es lo que el equipo de Zend decidió llamarlo. Eso en realidad quiere decir doble de colon - en hebreo
Esto también se está viendo cuando se aplica una constante en PHP para la función de vacío ():
if (!empty(SOME_CONSTANT)) {
}
Este fue mi caso. Lo resuelto mediante el uso de lo siguiente:
$string = SOME_CONSTANT;
if (!empty($string)) {
}
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 menor que arrojó este error.
La solución, en mi caso, era utilizar la palabra clave en lugar de self
$this
:
self::$defaults
funciona muy bien.
Esto puede suceder en foreachs cuando se utiliza:
foreach( $array as $key = $value )
en lugar de
foreach( $array as $key => $value )
Como se ha dicho aquí, por lo general necesita 5.3. Sin embargo, la forma en que se rompió todas las páginas fue retirando esta línea de nuestro archivo .htaccess.
# Use PHP 5.3
AddHandler application/x-httpd-php53 .php
Tal vez esto es de utilidad para de alguna manera.