Un vistazo a PHP 5.5

Esta es la entrada 1 de 3 en la serie: PHP nuevas características

PHP
En los últimos años la Comunidad PHP ha realizado un gran esfuerzo por seguir incorporando nuevas características y funcionalidades a este popular lenguaje de programación con el objetivo de hacerlo más atractivo, funcional y útil. Con la salida de PHP 5.5 se han introducido algunas características muy esperadas por la comunidad de desarrolladores. Hoy LibreByte propone echarle a un vistazo a todo lo nuevo que trae PHP 5.5.

– Generadores (Generators): Los generadores permiten implementar iteradores de manera legible y sencilla sin tener que entrar en la complejidad de implementar la interfaz Iterator pero con el inconveniente de que no pueden ser rebobinados (regresar el puntero al primer elemento) después de haberse comenzado a iterar. El corazón de los generadores es la palabra clave yield que en su forma simple se parece a la sentencia return pero en lugar de abortar la ejecución de la función y devolver un valor mantiene el valor de la variable y pausa la función mientra se itera sobre el generador. Para que se tenga una idea de como funciona aquí un ejemplo:

function xrange($start, $limit, $step = 1) {
    for ($i = $start; $i < = $limit; $i += $step) {
        print_r("Valor generado: $i");
        yield $i;
    }
}

foreach(xrange(0, 3) as $num) {
	print_r("Procesando num: $num");
}

// Salida
// Valor generado: 0
// Procesando num: 0 
// Valor generado: 1
// Procesando num: 1 
// Valor generado: 2
// Procesando num: 2 
// Valor generado: 3
// Procesando num: 3 

- Palabra clave finally: Ahora el bloque try {...} catch () {...} soporta finally lo que permite ejecutar sentencias php sin importar si ocurrió o no una excepción, ejemplo:

class InvalidDateException extends Exception {}

function test_finally() {
	try {
		print_r("Intento crear un objeto DateTime");
		new DateTime('oooooooh!');
	} catch (Exception $e) {
		print_r("Error creando el objeto DateTime");
		throw new InvalidDateException(); 
	} finally {
		print_r("Finalmente tareas de limpieza");
	}
}

try {
    test_finally();
} catch (InvalidDateException $e) {;
	print_r("Capture mi propia excepción (InvalidDateException)n");
}

// Salida
// Intento crear un objeto DateTime
// Error creando el objeto DateTime
// Finalmente tareas de limpieza 
// Capture mi propia excepción (InvalidDateException)

– Nueva API de encriptación de contraseña que ofrece un algoritmo de encriptación robusto y unidireccional. Funciones de referencia: password_hash, password_get_info, password_needs_rehash, password_verify

– Ahora la estructura de control foreach permite desempacar arreglos anidados haciendo uso de la sentencia list, ejemplo


$array = [
    [1, 2],
    [3, 4],
];
 
foreach ($array as list($a, $b)) {
    echo "A: $a; B: $bn";
}

 
// El resultado del ejemplo sería:
// A: 1; B: 2
// A: 3; B: 4

// Tambien puedes usar llaves valor

$array = [
    'ID1' => [1, 2],
    'ID2' => [3, 4],
];

foreach ($array as $key => list($a, $b)) {
    echo "Llave: $key, A: $a; B: $bn";
}

// El resultado sería
// Llave: ID1, A: 1; B: 2
// Llave: ID2, A: 3; B: 4

– La función empty además de variables soporta expresiones arbitrarias, ejemplos

Antes de PHP 5.5 la siguiente sentencias genera un error de sintaxis

empty([]);
empty("aaa");
empty(true);
empty(0);

Después de PHP 5.5 las sentencias anteriores son válidas, incluso la función empty soporta llamadas a funciones:

Class Test 
{
	
	public static function isEmpty() 
	{
		return false;
	}
}

function is_empty() {
	return 'no es empty';
}


var_dump(empty(Test::isEmpty()));
var_dump(empty(is_empty()));

// Salida
// bool(true)
// bool(false

– PHP 5.5 permite desreferenciar arreglos y cadenas literales (a partir de PHP 5.4 también es posible desreferenciar arreglos devueltos por funciones)

print_r(['A', 'B', 'C'][0] . "n");
print_r('ABCD'[0] . "n");

// Salida
// A
// A

– PHP 5.5 permite obtener el nombre completo de una clase, incluyendo el espacio de nombre al cuál pertenece, usando la propiedad estática class

namespace Mi\Espacio\De\Nombre;

class MiClase {}

echo MiClase::class, "\n";

// Salida
//Mi\Espacio\De\Nombre\MiClase

– The Zend Optimiser+ opcode cache ha sido agregada como una nueva extensión (OPcache). OPcache mejora el rendimiento de las aplicaciones php almacenando código php precompilado y eleminando la carga e interpretación de los scripts php en cada petición.

– PHP 5.5 Introduce varias mejoras a la extension GD

– Se introduce la función array_column que permite obtener todos los valores asociados a una columna de un arreglo de arreglo, por ejemplo partamos de que tenemos la siguiente información en una base de datos (Subconjunto de la tabla actor del la BD sakila)

+----------+------------+--------------+---------------------+
| actor_id | first_name | last_name    | last_update         |
+----------+------------+--------------+---------------------+
|        1 | PENELOPE   | GUINESS      | 2006-02-15 04:34:33 |
|        2 | NICK       | WAHLBERG     | 2006-02-15 04:34:33 |
|        3 | ED         | CHASE        | 2006-02-15 04:34:33 |
|        4 | JENNIFER   | DAVIS        | 2006-02-15 04:34:33 |
|        5 | JOHNNY     | LOLLOBRIGIDA | 2006-02-15 04:34:33 |
+----------+------------+--------------+---------------------+

y que ejecutamos la siguiente sentencias PHP

$sql = 'SELECT * FROM actor LIMIT 5';

if ($link = mysqli_connect('localhost', 'root', 'root', 'sakila')) {
	if ($result = mysqli_query($link, $sql)) {
		$actors = mysqli_fetch_all($result, MYSQLI_ASSOC);
		print_r(array_column($actors, 'first_name', 'actor_id'));
	}
}

el resultado obtenido sería el siguiente

Array
(
    [1] => PENELOPE
    [2] => NICK
    [3] => ED
    [4] => JENNIFER
    [5] => JOHNNY
)

– La extension mysql quedó obsoleta y en su lugar se recomienda usar mysqli o PDO

Lecturas recomendadas

Migrar de PHP 5.4.x a PHP 5.5.x




Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *