featured image

Hoy me ha llegado una noticia sobre la liberación de las alpha de PHP 5.4 y, buscando en Internet y en la propia página de PHP, veo que ya se tiene un plan para lanzar esta nueva versión de PHP.

Como cuando hablé sobre la liberación de PHP 5.3, esta nueva versión de PHP se va acercando un poco más al ideal de Programación Orientada a Objetos que ya se tiene en otros lenguajes como Python, Ruby, Java, C#, etc.

En esta nueva entrega, como en otras, hay cambios o mejoras sobre algunos elementos, cosas que se agregan al lenguaje y a la biblioteca de funciones (y objetos) y cosas que definitivamente se eliminan.

Deprecated...

Las cosas que se eliminan en esta versión son cosas tan poco usadas como los parámetros de break y continue, que supongo que tendrían su sentido... pero a mi nunca me hicieron falta, realmente.

Las funciones para almacenar datos en la sesión también han sido eliminadas, ya que con el array $_SESSION, se hacían poco útiles. Por lo que los códigos con funciones: session_register, session_unregister y session_is_registered... dejaran de funcionar en esta versión.

También se eliminan definitivamente cosas como y2k_compliance, register_globals, y otras cosas que en la versión antigua ya se marcaron como que se eliminarían a futuro.

Traits

Una de las grandes agregaciones en esta versión son los traits. Esta es una herramienta muy potente en entornos donde la herencia es simple, posibilitando la reutilización de código... más específicamente de los métodos que se desean portar entre clases de distinta índole.

Por ejemplo:

<?php
 trait ezcReflectionReturnInfo {
   function getReturnType() { /*1*/ }
   function getReturnDescription() { /*2*/ }
 }

 class ezcReflectionMethod extends ReflectionMethod {
   use ezcReflectionReturnInfo;
   /* ... */
 }

 class ezcReflectionFunction extends ReflectionFunction {
   use ezcReflectionReturnInfo;
   /* ... */
 }

Esto hace que las clases ezcReflectionMethod y ezcReflectionFunction se puedan beneficiar de las funciones definidas en el trait ezcReflectionReturnInfo, heredando cada una de su respectiva clase padre.

Más información aquí.

Filtrando cabeceras

Se ha agregado un nuevo callback, para cuando se envíen las cabeceras, justo antes de este instante, se ejecute un código personalizado que permita, junto con las funciones headers_list, header_remove y header, enviar solo las cabeceras que se quieran enviar:

<?php

header('Content-Type: text/plain');
header('X-Test: foo');

function foo() {
    foreach (headers_list() as $header) {
        if (strpos($header, 'X-Powered') !== false) {
            header_remove('X-Powered-By');
        }
    }
    header_remove('X-Test');
}

$result = header_register_callback('foo');
echo "a";

Ejemplo del blog de Carlos Ballesteros, header_register_callback en PHP 5.4.

Por defecto... UTF-8

Así es, hasta ahora, el uso interno de cadenas y textos se hacía en ISO-8859-1 o Latin-1. Al igual que en distribuciones como Debian o Red-Hat este valor se modificó a UTF-8, ahora PHP, en esta versión ha modificado su conjunto de caracteres para que por defecto esté a UTF-8. No obstante, esto puede modificarse desde php.ini.

Rendimiento

Parece que se han modificado muchos de los aspectos internos que tienen que ver con la gestión de memoria, arrays y serializaciones. En principio, según se puede ver en esta presentación, PHP en esta versión ha duplicado su velocidad, mientras que ha dividido por la mitad su consumo de memoria. ¡Eso es optimización!

Conclusiones

Hace bastante tiempo, escribí un artículo acerca de las Nuevas Versiones de los Lenguajes de programación. En este artículo, reseñaba cosas de las que a PHP 5.4 ya no le falta nada... o muy poco, pero apenas perceptible.

Realmente, PHP es un lenguaje al que odias o amas... o ambas cosas, ya que tiene cosas que lo hacen un poco insufrible, y sin embargo, son esas cosas las que le dan flexibilidad y gracias a las que se pueden hacer las cosas que se hacen. Con PHP 5.4, las diferencias que mostraban otros lenguajes con respecto a integración de POO se van acortando. Ahora solo falta que todos se actualicen a estas últimas versiones.