Poesía Binaria

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....