Publi

Cuando PHP jura en hebreo (PAAMAYIM NEKUDOTAYIM)

Son dos palabras raras que parece que quieren despistarnos. Y no es inglés, ni japonés, ni ruso… es hebreo.
Y todo se remonta al 1997 cuando Zend Technologies reescribe el motor de PHP planteado por Rasmus Lerdorf.
Zend es una compañía de origen israelí, y de ahí que haya palabras en hebreo.

Pero… qué quiere decir esto ? La traducción es “dobles dos puntos” o lo que es lo mismo “::”. Esto es el operador de resolución de contexto (o ámbito) (Scope Resolution Operator en inglés) que tiene PHP y que desde PHP 3 identifica a qué nos referimos; y cuando programamos orientado a objetos, ayudará a PHP a identificar si llamamos a un método, una constante, atributo, etc. (Como C++).
Cuando hacemos Clase::método() para referirnos a un método estático PHP pone en práctica todo esto.

¿Qué pasa cuando hay un error en esta llamada? PHP nos devolverá un error del tipo: “Unexpected T_PAAMAYIM_NEKUDOTAYIM”, diciendo que hemos puesto “::” de forma inesperada. Podemos probarlo así desde consola:

$ php -r “::”

Y es que :: tiene la misión de detectar que delante ponemos una clase, o una palabra clave que le haga referencia ($this, self, parent, static…), y luego un método/atributo/constante/… aunque como veremos a continuación hay que tener cuidado con la versión de PHP que se utilice.

Es un error común cuando utilizamos PHP5 (::CODECOLORER_BLOCK_1::

ya que no está soportado en esta versión. En cambio a partir de la 5.3 sí que podremos hacerlo. Mientras tendremos que utilizar call_user_func().

Así que si nos encontramos con este error, querrá decir que PHP no tiene claro a qué nos referimos, a veces lo encontramos cerca de :: pero otras veces no es tan claro, como por ejemplo aquí:

1
2
3
4
5
<?php
define('miConstante', 'algo');
if (empty(foo))
   echo 'vacía';
?>

Aquí fallará al hacer la llamada a empty() y es que tenemos que introducirle una variable como parámetro y no una constante (recordemos que el operador de resolución de contexto es el encargado de identificar variables, constantes y todo esto).

Más información:
Scope Resolution Operator [ Wikipedia ]
Ámbito de las variables [ PHP.NET ]
PHP Paamayim Nekudotayim [ The secret’s in the code ]

También podría interesarte...

There are 5 comments left Ir a comentario

  1. Pingback: Bitacoras.com /

  2. kenkeiras /
    Usando Mozilla Firefox Mozilla Firefox 3.6.13 en Linux Linux

    Ondia! vaya un error extraño, está bien saber de que se trata no vaya a ser de encontrarselo en medio de un proyecto

  3. admin / Post Author
    Usando Mozilla Firefox Mozilla Firefox 3.6 en Linux Linux

    A mí me pasó y no veas qué gracia. Resulta que estaba creando un proyecto más o menos grande, y yo en mi ordenador tengo instalado PHP 5.3 pero en el servidor tienen PHP 5.0 … total, cuando subí la web, aviso al interesado para que la vea y ve esto. No veas qué gracia…

  4. Pingback: Tweets that mention Poesía binaria » Cuando PHP jura en hebreo (PAAMAYIM NEKUDOTAYIM) — Topsy.com /

  5. Pingback: BlogESfera.com /

Leave a Reply