Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: KOFFERO en 20 de Octubre 2017, 21:03
-
Hola amigos, quería preguntar algo sobre este operador, se trata, cuando yo comparo dos varibles, y luego uso el operador de corto circuito, para comparar otra dos varibles. Por ejemplo acá dejo mi código. Referencia del curso básico de programación php: CU00818B.
<?php
$mañana = 7;
$siesta = 12;
$tarde = 13;
$noche = 19;
$HoraDiaria = ($mañana < $siesta && $tarde == $noche);
if ($HoraDiaria == true) {
echo "Es de mañana";
} else{
echo "Es de tarde, pero se acerca la noche";
}
?>
Bueno paso a explicar lo que es este código que realize. Hay lo que hice fue, crear cuatro variables con distintos valores, y esos valores se basan las horas del dia como la mañana, siesta, tarde y noche, tambien cree otra varible, "$HoraDiaria", para tener un orden y comparar las variables, y la comparación es asi, si mañana es menor que tarde entonces es verdadera, luego use el corto circuito &&, para comparar tarde es igual a noche dando como falso, entonces cree una condición para comparar $HoraDiaria es igual a true, y se me imprime Es de tarde, pero se acerca la noche.
Mi pregunta es, si la primera comparación de mañana es menor que siesta, entonces es verdadera todas las demas vaibles posteriores, o si es verdadera entoces tambien se compara tarde es igual a noche, dandonos como falsa, y como una es verdadera y la otra falsa, todo es falso, y cuando los comparamos en la condición HoraDiaria es igual true, nos da falsa, ya que true igual false, nos da falso, no se cumple la primera condición, pero si se cumple la segunda.
Un saludo, y gracias de ante mano por la ayuda.
-
Hola Jorge,,, una cosa que se debe tener en cuenta es que si escribimos algo como:
echo ' manana menor que siesta '.($mañana < $siesta). '</br>';
echo 'tarde igual a noche '.($tarde==$noche). '</br>';
Obtenemos como salida
manana menor que siesta 1
tarde igual a noche
En este caso el resultado true lo muestra como 1, mientras que para un resultado false no se muestra nada por pantalla (aunque esto podría diferir según el sistema y su configuración, en algunos sistemas se podría mostrar un cero cuando se trata de un false).
En tu código tendríamos:
$mañana < $siesta es true
$tarde == $noche es false
$mañana < $siesta && $tarde == $noche es por tanto false y $HoraDiaria es false
Por tanto el resultado que debe mostrarse es Es de tarde, pero se acerca la noche
La comparación en cortocircuito con && comprueba la primera parte de la expresión ($mañana < $siesta). Si fuera falsa devolvería false y no seguiría comparando nada más. Al ser verdadera, comprueba la segunda parte ($tarde == $noche) y al ser falsa devuelve false.
Aquí ocurre lo que tú has indicado, con un && como una es verdadera y la otra falsa, todo es falso. && significa que ambas tienen que cumplir la condición. Si no cumplen ambas, todo es falso.
Saludos