¿Qué es lo nuevo en PHP 5.5?

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:

<?php
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:

<?php
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

<?php
$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

<?php
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:

<?php
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)

<?php
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

<?php
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

<?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

YouTube video

Lecturas recomendadas

YouTube video

PHP nuevas características, 6 (8)

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.