Para utilizar todas las funcionalidades que ofrece este sitio, es necesario tener JavaScript habilitado.

Lo ideal sería trabajar con servidores que tienen una versión de PHP reciente, pero esa no siempre es la realidad. Alguna vez tuve que trabajar en varios servidores, cada uno con una versión distinta de PHP y precisamente en esos casos, trazar la linea entre las funcionalidades que están disponibles entre una versión y otra se puede complicar.

Por este motivo, voy a destacar algunas funcionalidades de cada versión, para que sirva como recordatorio, la próxima vez que tenga que trabajar en entornos distintos.

Este listado no pretende hablar de los cambios internos que se hicieron (como por ejemplo en el manejo de memoria). El objetivo principal es mostrar algunas funcionalidades que yo uso y recordar a partir de que versión las puedo utilizar. A ver si me evito la búsqueda de información en el manual.

Empiezo desde la 5.1 en adelante, pues la diferencia entre 4.9 y 5.0 es abismal y en mi experiencia, aún hay muchos servidores configurados para trabajar con 5.1/5.2 que por algún motivo no han querido/podido actualizar.

PHP 5.1

En mi opinión, esta es un versión principalmente dedicada a corregir algunas inconsistencias relacionadas con la manera en como PHP se usaba en la programación dedicada a objetos y otros problemas en general.

Algo que se pueda destacar, es la habilidad de escribir constantes de clases (de vez en cuando las uso). Vale la pena recordar, que el verdadero potencial de ellas, se puede alcanzar en versiones mayores o iguales a PHP 5.3.

Otra cosa que hay que anotar, es que PDO esta habilitado por defecto..

PHP 5.2

htmlspecialchars y htmlentities aceptan un cuarto parámetro booleano que permite deshabilitar la doble codificación de entidades HTML.

También se puede hacer uso de la función error_get_last  que es util a la hora de encontrar errores. La llegada de la extension JSON nos bendice con las funciones json_decode y json_encode.

Se crearon un par de clases que son vitales para la manipulación de fechas - DateTime y DateTimeZone.

PHP 5.3

A partir de aquí las cosas se ponen bien interesantes.

Para empezar, ya no es estrictamente necesario usar la función define para definir constantes, como define('GREET', 'Hello world');. A partir de esta versión se puede usar simplemente  const GREET = 'Hello World';.

Si es necesario usar operadores ternarios, se puede usar echo ('si' ?: 'no'); // si . A mi generalmente no me gusta hacer uso de este tipo de operadores, pero de vez en cuando son útiles. Otras cosas que se destacan mucho es el soporte para namespaces y funciones anónimas / clausuras (closures).

Adicionalmente, hay un par de métodos mágicos, __callStatic() e __invoke() que aunque no uso con frecuencia, es util saberlos.

PHP 5.4

Se pueden escribir arrays de forma corta $a = ['1', '2']; y también se pueden derreferenciar funciones que retornen un array:

echo parse_url('http://hola.com')['host']; // retorna -> hola.com

Me gusta mucho que a partir de esta versión hay una forma corta para hacer un echo dentro de un template.

También hay que mencionar la llegada de los traits. Yo no soy fan de los traits y prometo escribir una entrada al respecto más adelante, discutiéndolos a fondo.

Otro par de cosas que hay que reconocer es que esta versión trae consigo un servidor local que puede ser util a la hora de hacer pequeñas aplicaciones. Y por último esta la posibilidad de saber el progreso de subida de archivo, con ayuda de $_SESSION.

Adicionalmente, se creó el typehint llamado Callable y las clausuras (closures) soportan la pseudo-variable $this.

PHP 5.5

Al momento de escribir esta entrada, la versión 5.5 esta en estado beta 2, así que hay algunos detalles que puedan cambiar.

En mi opinión esta versión esta genial. En general hay muchos cambios que estaba esperando desde hace mucho tiempo!

Empecemos hablando del soporte para Generadores y Corutinas.  Un generador es básicamente una función que no retorna un solo valor, sino una secuencia de valores, en donde cada valor es calculado/emitido uno por uno. Cual es la ventaja de esto? pues que nos permite trabajar con sets de datos grandísimos, sin tener que sacrificar la memoria del servidor, o si vamos más allá, teóricamente podríamos trabajar con un set de datos infinito, sin tener mayores problemas!

Las Corutinas son un poco más complicadas de explicar, pero lo podríamos ver como un mecanismo para comunicarnos con un generador y así modificar la información que se va a retornar.

Veamos el ejemplo clásico de un generador:

Hay un artículo en ingles, escrito por NikC en donde describe como crear un servidor web gracias a los Generadores y Corutinas, muy recomendado.

Hace algún tiempo escribí acerca de como almacenar passwords en una base de datos, ahí toco un poco el uso de BCrypt para hashear datos. Pues ahora con esta versión de PHP, las cosas serán mucho más sencillas! Tenemos un nuevo API para hashear Passwords, un ejemplo de uso sería:

Y como si fuera poco esta versión viene con un Opcode Cache integrado! Este es un componente clave a la hora de optimizar el rendimiento de aplicaciones con PHP, ya que nos evita compilar el código siempre que haya un pedido al servidor. Una vez haya más información al respecto tratré de actualizar esta entrada.

Otro par de cositas chéveres son:

  • Los bloques try-catch aceptan ahora un finally.
  • Dentro de un bucle foreach se puede usar la función list() para trabajar fácilmente con arreglos multidimensionales.
  • La función empty() ahora acepta expresiones arbitrarias. Es decir, ya se puede usar algo como if (empty(miFuncion())) { ... }.
  • Se pueden derreferenciar arrays o strings directamente, tipo echo [1, 2, 3][0];.
  • Hay un par de funciones nuevas que nos pueden ser útil como boolval(), array_column(), hash_pbkdf2() e image_flip().
  • La antigua extensión MySQL ahora esta marcada como obsoleta y en próximas versiones de PHP será removida. Ahora cada vez que se use mysql_connect(), va a lanzar un alerta del tipo E_DEPRECATED. Como quien dice, es hora de acosar a los programadores a que usemos PDO o MySQLi .. personalmente he estado usando PDO desde hace raaaato y me ha ido muy bien.

 

Como verán, PHP 5.5 es una versión importante, que valdrá mucho la pena (y eso que no estoy hablando de los cambios internos, que son aún más fascinantes).

El problema será esperar a que los proveedores de hosting actualicen rápidamente, pero viendo el desarrollo actual, en tema de actualizaciones, no nos podemos ilusionar mucho.

Y bueno, hasta aquí llega el artículo, si tienes problemas viendo los ejemplos, los puedes ver directamente en https://gist.github.com/mpratt/5374028.

Algún error en esta entrada? Algo para corregir o discutir? Déjame un comentario! Hasta la próxima y muchas gracias por leer.

Comentarios