Las nuevas características de PHP 5.5

Posted by victor on February 24th, 2013
php-logoEl pasado 21 de Febrero se lanzó PHP 5.5.0 Alpha5 y creo que es un buen momento para comentar algunas de las novedades que traerá esta nueva versión. Novedades que van desde crear iteradores de forma más sencilla hasta una nueva API para el hashing de password.

Construir iteradores más sencillos

Con el fin de crear iteradores de forma sencilla y rápida, nace el Generators, que nos permite construir iteradores mediante bucles sin tener que escribir los métodos de la interfaz Iterator:
// Iterador del 0 al 9
function rangeTo10()
{
    for(i=0; i< 10; i++)
    {
        yield $i; //yield no return;
    }
}
Usar el iterador es sencillo:
 foreach (rangeTo10() as $number) {
    echo "$number ";
}

Salida: 0,1,2,3,4,5,6,7,8,9
La parte interesante de los Generators es la sentencia yield, que a diferencia de return, no hace que termine el flujo de la función sino que queda 'congelado' y continua devolviendo resultados en la siguiente iteración. Los Generators además nos permiten iterar sobre los datos sin tenter que crear un array adicional en memoria. Por ejemplo, la función range(0, 1000000) crearía en memoria un array de un millón de elementos que ocuparían 100 MB en memoria. Por último, no olvides echarle un vistazo a la sintaxis de la sentencia yield.

Nueva Password Hashing API

La nueva API gira entorno a la función crypt(), que obtiene el resumen de una cadena de entrada. La Password Hashing API no es más que un envoltorio para gestionar los password mediante las siguientes funciones:
  • password_hash: Obtiene un hash del password de usuario. Permite indicar el algoritmo.
  • password_get_info: Devuelve información sobre los parámetros usados para crear el hash.
  • password_needs_rehash: Esta función es muy interesante porque devuelve un booleano que indica si el hash se ha generado con loas parámetros que le indicas a password_needs_rehash como argumento.
  • password_verify: Esta as la función más interesante de todas porque permite comprobar si el password suministrado por un usuario es válido. Lógicamente, debemos tener previamente almacenado el hash del password.
Todos los hash empleados por la Password Hashing API deben crearse con password_hash().

Mejora de la función empty()

Ahora no solo acepta variables sino que también se pueden pasar funciones como argumento: PHP < 5.5:
$nombre = " yosymfony "
$nombreNormalizado = trim($nombre)

if(!empty($nombreNormalizado))
    echo 'hay nombre'
PHP >= 5.5:
$nombre = " yosymfony "

if(!empty(trim($nombre))   // Ahora esto no produce error
    echo 'hay nombre'

Los bloques try... catch soportan finally

Por fin PHP se iguala a otros lenguajes e incorpora la sentencia finally para ejecutar código dentro de un bloque try... catch se produzca o no excepción.
try {
    echo 'Código';
} catch (Exception $e) {
    echo 'Exceptión: '.$e->getMessage();
} finally {
    echo 'Bloque finally.';
}

Array y string dereferencing

Para mí, esta es una de las características más importantes. Ya en la versión 5.4 se consiguió el dereferencing en arrays devueltos por funciones. Ahora ya es posible usarlo en literales:
function getArray() {
    return array(1, 2, 3);
}

// Anterior a PHP 5.4
$tmp = getArray();
$item= $tmp[1];

// de otra forma:
list(, $item) = getArray();

// En PHP 5.4
$secondElement = getArray()[1];

// En 5.5 también se puede:
echo [1, 2, 3][0]; // Muestra 1

// Con string también funciona:
echo 'php'[0] // Muestra p

Soporte de List() en bucles foreach

El constructor list() permite asignar en una sola operación el valor de varias variables. En esta nueva versión de PHP es posible usarlo en bucles foreach:
$array = [
    [1, 2],
    [3, 4],
];

foreach ($array as list($a, $b)) {
    echo "A: $a; B: $b\n";
}

Comments

comments powered by Disqus