Novedades en php

A pesar de que php7 fue liberado hace mucho tiempo (Diciembre 2015), muchas personas siguen programando en php5 (5.6 fue la ultima versión) o peor aún utilizan php7 pero sin aprovechar los mejores cambios. Es por eso que decidí crear este articulo con los mejores cambios en PHP7 que te ayudaran a crear mejor código con menos esfuerzo.

Operador de fusión de null

Se escucha un poco extraño, pero con esta explicación te quedará todo muy claro, imagina que esperas recibir un parámetro get llamado id, pero como buen programador debes validarlo antes de usarlo, entonces usas un código como este:

if isset( $_GET['id'] )
{
  $id = $_GET['id'];
}
else
{
  $id = '';
}

Aun si usas un operador ternario y tu código se reduce a esto:

$id = isset($_GET['id']) ? $_GET['id'] : '';

Al usar el operador de fusión null, tu código se reduce mucho y es más fácil de leer.

$id = $_GET['id'] ?? '';

Como ves, solo asignas un valor y si colocas dos signos de interrogación, puedes colocar un valor predeterminado (en este caso una cadena vacía) y si la variable no ha sido asignada o tiene un valor null, se omite y se usa el valor predeterminado.

Declaraciones de tipo escalar

Declaraciones de tipo escalar - php7

Ahora con PHP7 se puede declarar los tipos de datos en los parámetros de las funciones, con tipo escalar, se refiere a los tipos básicos como string o integer. Esto es útil por que siempre es una buena idea validar los parámetros, veamos un ejemplo:

function suma($a, $b) //suma dos numeros enteros
{
   if (!is_int($a)){
        throw new Exception("$a no es un numero entero");
   }

   if (!is_int($b)){
        throw new Exception("$b no es un numero entero");
   }

  return $a + $b ;
}

Si probamos este código veremos estos resultados:

echo suma(1,3); // Resultado: 4
echo suma(1.5, 1); //Resultado: Fatal error: Uncaught exception 'Exception' with message '1.5 no es un numero entero'

Ahora veamos el código, usando las declaraciones de tipo escalar.

function suma(int $a, int $b) //suma dos numeros enteros
{
  return $a + $b ;
}

Si probamos el código veremos estos resultados:

echo suma(1,3); // Resultado: 4
echo suma(1.5, 1); //Resultado: 2

Como vemos el segundo llamado  echo suma(1.5, 1); no genera un error y es por que php convierte los parámetros a al tipo de datos  requerido, en este caso convierte 1.5 en 1 y la función se ejecuta sin problemas. Si queremos ser más estrictos podemos agregar esta linea de código:

declare(strict_types=1);

Ahora al llamar la función con 1.5 generará un error.

Mucho más simple ¿cierto?

Declaraciones de tipo de devolución

De la misma forma en que validamos que recibimos parámetros con los tipos de datos correctos, también podemos validar que nuestra función regrese los tipos de datos correctos, veamos un ejemplo:

function getId( ):int
{
    return "dos";
}

En el ejemplo anterior la función debe regresar un id, y este id debe ser un numero entero, esto lo definimos con dos puntos y el tipo de datos en la misma linea en donde declaramos el nombre de la función. Como la función regresa una cadena de texto, genera un error al ejecutar la función. De esta forma protegemos a nuestra función de entregar un resultado equivocado.

Tipos nulos (PHP7.1)

De la forma en que declaramos el tipo de dato en los parámetros o en el valor de retorno, también podemos especificar que los valores pueden ser nulos. Esto lo hacemos con un signo de interrogación antes del tipo de datos como se muestra aquí:

function prueba(?string $valor): ?string
{
   return $valor;
}

Ahora probamos esta función

echo prueba(null); //Regresa null
echo prueba(''); //Regresa una cadena vacia
echo prueba( ); //Genera un error por que falta el parametro

Como vemos podemos llamar la función con un parámetro null o alguna cadena de texto, pero si la llamamos sin ningún parámetro, genera un error. Es es útil en caso de que llamemos a la función con alguna variable, la cual no sabemos si en algún momento podría tener un valor null pero aun asi la función debería de trabajar sin problemas.

El operador nave espacial

Operador de nave espacial - php7

Es llamado asi, por que visualmente nos recuerda a una nave espacial, como la usada por Darth Vader en Star Wars. Este operador se usa para comparar dos expresiones y regresa un resultado de esta forma:

echo 1 <=> 1; // 0, el primer valor es igual al segundo valor
echo 1 <=> 2; // -1, el primer valor es menor que el segundo valor
echo 2 <=> 1; // 1, el primer valor es mayor que el segundo valor

No es muy impresionante ¿cierto?, pero esto puede ser más útil de lo que aparenta, imagina que tienes un array y lo quieres ordenar, el operador de nave espacial es perfecto para este trabajo, solo mira este código:

$clientes = [
    [
        'nombre' => 'Carlos',
        'apellidos' => 'Pineda'
    ],
    [
        'nombre' => 'Luis',
        'apellidos' => 'Cruz'
    ],
    [
       'nombre' => 'Gabriela',
        'apellidos' => 'Garcia'
    ]
];

// Ordernar clientes por nombre
usort($clientes, function ($a, $b) {
    return $a['nombre'] <=> $b['nombre']; //Operador de nave espacial
});

echo '<pre>';
print_r($clientes);
echo '</pre>';

Como ves ordenar un arreglo nunca había sido tan fácil, la salida del código anterior es esta:

Array
(
    [0] => Array
        (
            [nombre] => Carlos
            [apellidos] => Pineda
        )

    [1] => Array
        (
            [nombre] => Gabriela
            [apellidos] => Garcia
        )

    [2] => Array
        (
            [nombre] => Luis
            [apellidos] => Cruz
        )

)

Conclusión

Como ves, PHP7 y PHP7.1 vienen con nuevas funcionalidades que pueden hacer tu vida de programador más fácil, ahora que ya conoces esto, debes ponerlo en practica lo más pronto posible para que no lo olvides y comiences a tomar ventaja.

Deja un comentario

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