Saltar al contenido

¿PHP tiene evaluación de cortocircuito?

Te recomendamos que pruebes esta solución en un entorno controlado antes de pasarlo a producción, saludos.

Solución:

Sí, el intérprete de PHP es “perezoso”, lo que significa que hará el mínimo número de comparaciones posibles para evaluar las condiciones.

Si quieres verificar eso, prueba esto:

function saySomething()

    echo 'hi!';
    return true;


if (false && saySomething())

    echo 'statement evaluated to true';

Sí, lo hace. Aquí hay un pequeño truco que se basa en la evaluación de cortocircuitos. A veces puede tener una pequeña declaración if que preferiría escribir como un ternario, por ejemplo:

    if ($confirmed) 
        $answer = 'Yes';
     else 
        $answer = 'No';
    

Se puede reescribir como:

   $answer = $confirmed ? 'Yes' : 'No';

Pero entonces, ¿qué pasa si el bloque sí también requiere que se ejecute alguna función?

    if ($confirmed) 
        do_something();

        $answer = 'Yes';
     else 
        $answer = 'No';
    

Bueno, todavía es posible reescribir como ternario, debido a la evaluación de cortocircuito:

    $answer = $confirmed && (do_something() || true) ? 'Yes' : 'No';

En este caso la expresión (hacer_algo() || true) no altera el resultado general del ternario, pero asegura que la condición ternaria se mantenga trueignorando el valor de retorno de do_something().

Los operadores bit a bit son & y |. Siempre evalúan ambos operandos.

Los operadores lógicos son AND, OR, &&y ||.

  • Los cuatro operadores solo evalúan el lado derecho si es necesario.
  • AND y OR tienen menor precedencia que && y ||. Vea el ejemplo a continuación.

Del manual de PHP:

// The result of the expression (false || true) is assigned to $e
// Acts like: ($e = (false || true))
$e = false || true;

// The constant false is assigned to $f before the "or" operation occurs
// Acts like: (($f = false) or true)
$f = false or true;

En este ejemplo, e estarán true y f estarán false.

Comentarios y puntuaciones

Puedes añadir valor a nuestro contenido cooperando tu veteranía en las críticas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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