Nuevas funcionalidades en PHP 5.5

Una vez que hemos visto todas las ventajas que nos puede traer PHP 5.4 y sabiendo que esta no es la última versión estable sería interesante ver cuáles son las ventajas de esta para una vez decididos migrar optemos por una u otra.

Generadores

Una de las necesidades de programación más comunes, es ser capaz de realizar una acción sobre todos los elementos de un objeto. Por ejemplo, usando un foreach en una matriz, para obtener cada clave o, un foreach sobre un objeto, para obtener el nombre de cada parámetro y su valor. El mecanismo para la aplicación de este comportamiento es conocido como un iterador, que se utiliza para recorrer todos los elementos de un objeto o una matriz. Los iteradores se pueden definir de forma explícita con clases personalizadas, pero eso puede ser un proceso difícil de manejar y complejo, con apaños y, más que un puñado de funciones.

¿Qué pasa si quiero actuar en un subconjunto de una matriz, y realizar algo de lógica a medida que avanzo, pero aún así ser capaz de recorrer el objeto? Bueno, PHP 5.5 ha introducido los generadores, que son una forma libre y fácil de implementar un iterador mediante el uso de la palabra clave yield. Yield proporciona un valor añadido a los bucles, y hace una pausa la ejecución de la función del generador.

Hay ejemplos muy útiles en la documentación oficial de PHP.

Eliminando referencias en matrices y cadenas

Con PHP 5.4 se introducía el concepto de eliminar referencias a los objetos para llamar a funciones dentro de ellos, con PHP 5.5 se va un paso más adelante y ahora se eliminan las referencias en las matrices y en las cadenas.

Con PHP 5.4 podíamos hacer lo siguiente:

(new DateTime())->getTimestamp()

Ahora con PHP 5.5 podemos hacer lo siguiente:

array(“hola”, “buenas”, “saludos”)[mt_rand(0,2)] y “hola como estas”[0]

Estructura finally

Una de las principales características de PHP son las excepciones, respuestas a un evento anormal que típicamente requiere el cambio de flujo de la ejecución del programa normal. Hasta este punto, PHP ha permitido código para probar o intentar hacer algo (try). Si se produce una excepción esta puede ser capturada, es decir, manejada (catch). Sin embargo, algunos flujos de programas requieren algún tipo de operación de cierre que tiene que ocurrir, incluso si no es una situación excepcional. Por ejemplo si bloqueáramos las tablas de una base de datos deberíamos desbloquearlas ocurra o no una excepción, esto lo hacíamos hasta PHP 5.5 repitiendo código.

En PHP 5.5 un nuevo bloque está disponible para esto, finally. Finally se ejecuta después de un bloque try / catch y antes de reanudar la ejecución normal, lo que permite que operaciones de limpieza se ejecuten, incluso si hay un problema.

API para la encriptación de contraseñas

La encriptación de contraseñas (password hashing) es un mecanismo que convierte una contraseña, en una cadena codificada de un solo sentido que se puede almacenar y convirtiendo en un proceso muy difícil sin el código obtener de nuevo a la contraseña original. Esto es una fuerte capa de defensa más en caso de que se vea comprometida nuestra base de datos. Hasta PHP 5.5, se utilizaron bibliotecas de hashing de contraseñas, tales como frameworks o PHPass. Ahora, hay un mecanismo estandarizado y fácil de usar integrado en el núcleo de PHP. Hay tres funciones principales que debe tener en cuenta: password_hash, password_verify y password_get_info.

Caché de códigos en el núcleo

La funcionalidad más importante de PHP 5.5 y una de las características más significativas es la inclusión de una memoria caché de código de operación incluida con la distribución del núcleo. A diferencia de lenguajes como C, los scripts PHP se compilan sobre la marcha, y luego son ejecutados por el motor de PHP. Como tal, el rendimiento puede ser más lento que los lenguajes pre-compilados. Una de las técnicas utilizadas para evitar estos retrasos es utilizar lo que se conoce como una caché de código de operación, que almacena la salida del compilador de PHP en la memoria compartida para su reutilización. Una caché opcode común es la libre y de código abierto Alternativa PHP Cache, o APC, sólo disponible como una instalación independiente.

Otra caché opcode común es Zend Optimizer +, que ha sido una opción de código cerrado comercial y recientemente liberada como código abierto. ¿Por qué? La razón de lanzar Zend Optimizer + como código abierto fue permitir que se incluya en el núcleo de PHP para la versión 5.5. como OPcache. PHP ya no tiene necesidad de instalar por separado una caché de código de operación.

La manera de activarla es muy sencilla, tendremos que editar nuestro php.ini y agregar las siguientes líneas:

[opcache]
zend_extension = php_opcache.dll
opcache.enable=1
opcache.enable_cli=1

Si queremos hacer una prueba de rendimiento podremos utilizar ApacheBench que viene incluido con el servidor web Apache, por lo que no requiere instalación, ejecutamos en la consola lo siguiente:

ab –n 100 –c 5 http://localhost/……

Con ello estamos probando en nuestro sitio 100 peticiones con 5 usuarios concurrentes. Haced la prueba y me contáis.

¿Qué os parecen las novedades de PHP 5.5?

Comentarios