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 true
ignorando 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
yOR
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.