Operadores avanzados en PHP

Rutas
Solucionex
05
Jul 24

Con los avances en el desarrollo de PHP se han ido introduciendo una serie de operadores bastante útiles a la hora de reducir la cantidad de líneas de código en nuestras aplicaciones PHP, estamos hablando de los operadores "Elvis operator" (?:), "Null coalescing operator" (??), "Spaceship operator" (<=>), "Nullsafe operator" (?->) y "Execution operator" (``).

Elvis operator (?:)

Es una forma abreviada del operador ternario, esto es comprueba el primer valor si se evalúa a true devuelve el primer valor y si no devuelve el segundo, esto es

$value ?: $other

Es lo mismo que

$value ? $value : $other

Que es lo mismo que

if ($value) {
    return $value;
} else {
    return $other;
}

Null coalescing operator (??)

Este operador comprueba si la primera variable es nula en cuyo caso devuelve la segunda variable y en caso contrario devuelve la primera, esto es

$value ?? $other

Es lo mismo que

$value != null ? $value : $other

Que es lo mismo que

if ($value != null) {
    return $value;
} else {
    return $other;
}

Spaceship operator" (<=>)

El spaceship operator lo que hace es comparar dos variables y si la primera es menor que la segunda devuelve -1, si son iguales devuelve 0 y si la primera es mayor que la segunda devuelve 1, esto es

$var1 <=> $var2

Es lo mismo que

if ($var1 < $var2) {
    return -1;
} elseif ($var1 > $var2) {
    return 1;
} else {
    return 0;
}

Este operador es bastante útil cuando tenemos que usar funciones de ordenación a las que les tenemos que pasar una función que le dice como tiene que ordenar los elementos como pueda ser usort o parecidas

Nullsafe operator (?->)

Este operador está desarrollado para simplificar la comprobación de variables nulas antes de llamar a sus métodos o propiedades, esto es

$variable?->propertyOrMethod()

Es lo mismo que

if ($variable != null) {
    return $variable->propertyOrMethod();
}

Este operador puede encadenarse, gracias a que implementa un corotocircuito en el operador, esto es si hacemos esto

$variable?->getMethod1()?->getMethod2()?->getMethod3()

y la llamada a getMethod1 o a getMethod2 devuelve null no ejecutará las llamadas siguientes

Execution operator (``)

Básicamente es una forma corta de hacer una llamada a shell_exec(), esto es

$res = `comando`;

Es lo mismo que

$res = shell_exec('comando');
php