Hoy me animo a escribir de nuevo un artículo en el blog después de mucho tiempo. En esta ocasión es simplemente un truquillo o consejo para cuando estés desarrollando un plugin o theme, por ejemplo.
Si alguna vez has desarrollado sobre PHP, es muy probable que te hayas encontrado con muchos Notices porque una variable no existe. Es entonces cuando tiramos de un if (isset($var))… y dentro de ese if, ya hacemos lo que queramos con ella.
Y muchas de esas veces, comprobamos con otro if si la variable tiene algún valor concreto para realizar una acción. Es decir, algo tipo:
<?php
if ( isset($my_var) ) {
if ( true === $my_var ) {
// do something
}
}
Tenemos dos ifs anidados para realizar nuestra acción. En el segundo de ellos utilizamos una yoda condition, donde la constante (en este caso true) va en el lado derecho de la comparación. Si tienes curiosidad te dejo más información aquí.
Pero eso de tener dos ifs anidados… a mucha gente le produce urticaria. ¿podemos hacerlo en una línea? La respuesta es sí, y quedaría algo más elegante:
<?php
if ( true === ( isset( $my_var ) ? $my_var : null ) ) {
// do something
}
Simplemente utilizamos un operador ternario, donde preguntamos si nuestra variable existe. En caso afirmativo devolvemos el valor de la variable y en caso negativo devolvemos null. Y esta respuesta de nuestra ternaria la igualamos a true. Si se cumple, entramos dentro del if.
Aún podemos darle una vuelta de tuerca más. Si trabajas sobre versiones PHP 7.0 o superiores, podemos utilizar el operador de fusión de null (??). Devuelve su primer operando si existe y no es null, de lo contrario devuelve su segundo operando:
<?php
if ( true === ( $my_var ?? null ) ) {
// do something
}
De este modo evitamos una doble anidación y queda nuestro código más limpio. Además evitamos esos desagradables Notices que aparecen si no haces estas comprobaciones antes de utilizar variables.