Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso Práctico de PHP

Curso Práctico de PHP

Ana Belisa Martínez

Ana Belisa Martínez

Operadores lógicos con PHP

4/17
Recursos

Aportes 21

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Algo que me sacó de onda y creo que a más estudiantes les puede pasar, es que si haces el ejercicio tal cual la maestra lo explica y experimentas un poquito más, te van a dar resultados “extraños”.

<?php 
  $valorA = false;
  $valorB = true;

  $resultado = $valorA or $valorB;
  var_dump($resultado);
?>

Del código de arriba, en tu consola estarías obteniendo como resultado bool(false), pero… ¿por qué? se supone que con el operador or, si uno u otro o ambos son verdaderos, da como resultado verdadero.

La explicación es sencilla, si utilizas el operador and, or o xor se estaría haciendo la asignación y después la operación. En cambio, si usamos && y || se hace primero la operación y después la asignación.

Sería algo así, usando el operador or de nuestro mismo ejemplo, se estaría haciendo la asignación y después la operación de la siguiente manera:

($resultado = $valorA) or $valorB;

Mientras que usando los operadores && y || su representación jerárquica quedaría así.

$resultado = ($valorA or $valorB);

Espero les sirva 😘

Hay un error en la forma en la que ‘xor’ trabaja en el ejemplo, si los valores son TRUE, entonces xor deberia resultar en FALSE.

Para arreglar el problema de precedencia tienes que escribir tu codigo de la siguiente manera:

<?php 

$valorA = true;
$valorB = true;

$result = ($valorA xor $valorB);  // comparar las variables entre parentesis.
var_dump($result);

?>

Para poder activar el depurador de PHP, es decir, para escribir php y el archivo, les dejo el siguiente articulo:
https://platzi.com/tutoriales/1338-php/3041-como-activar-depurador-php-en-visual-studio-code/

Hay un error en el primer ejemplo de xor, cuando ambas variables son **true **debería dar false, esta dando true solo debido a la precedencia

4. Operadores lógicos con PHP

Hay un punto a considerar, de acuerdo al PSR-12, la etiqueta de cierre de PHP debe ser omitida si el archivo .php, solo contiene código php:

The closing ?> tag MUST be omitted from files containing only PHP.

Operadores lógicos: and, or, xor, not

La precedencia es que primero se va a comparar los valores de la izquierda, antes que los de la derecha si se usa && o ||.

Código de la clase:

<?php
$valorA = false;
$valorB = false;

$resultado = !$valorA;

var_dump($resultado);

Documentación a consultar (PHP):

https://www.php.net/manual/es/language.operators.logical.php

Básicamente or y xor es lo mismo xD

Hay un error con XOR con true para ambos casos.
No se percato que el resultado fue erroneo debido a la precencia de operadores.
La moraleja de todo esto, es usar siempre parentesis para forzar al interprete a que haga lo que necesitamos.

A la hora de usar los operadores es muy importante tomar en cuenta la precedencia porque si no se pueden obtener resultados inesperados.
En el Curso Básico de PHP: Instalación, Fundamentos y Operadores explican esto de manera muy detallada y sencilla de entender

¿Por qué $resultado = $valorA xor $valorB es true?
.
Debido a la precedencia
Esto lo hace teniendo en cuenta la asociatividad
.
En el caso de xor su asociatividad es izquierda.
Es decir, en el ejemplo anterior no le estamos aplicando el xor a las variables. Le estamos asignando a $resultado la variable $valorA
.

$resultado = $valora xor $valorb;
var_dump($resultado); //true
var_dump($resultado xor $valorb); //false

Para realizar no tener problemas con la precedencia debemos usar ().
De esta manera, PHP hará la operación y eso será asignado a la variable $resultado

$valora = true;
$valorb = true;

$resultado = ($valora xor $valorb);
var_dump($resultado); 

//Salida false

Para una explicación 100 veces mejor mira esta clase

En la documentación de PHP viene una explicación acerca de la precedencia en PHP.

La Precedencia ayuda mucho para ordenar por “Prioridades” la secuencia del código por eso cuando utilizan los valores de False y True cambia el resultado.

cuando asignen una variable y vayan a hacer una validación tipo: $variable = true and false;
esto nos dará true, debido a que la precedencia primero asigna, para que la comparativa sea correcta debemos encerrar los valores a comparar entre paréntesis, de esta forma lo obligamos a realizar primero la comparación y luego la asignación quedaría de esta forma $variable = (true and false);

<?php
/*
Datos booleanos o de lógica, son aquellos que nos arrojan un  resultado de True or False dependiendo de su valor. 
Se encuentran con normalidad cuando se realizan condiciones, y/o funciones dándole a nuestra lógica de programación la información suficiente 
para determinar si algo está sucediendo o no.
Tablas de Verdad: Son aquellas tablas que indican cuál sería el resultado esperado acerca de lo que sería verdadero o falso, dependiendo de la conexión que se realice entre ellas.
Ejemplo. Si se combina un valor verdadero con un valor que es falso, nos dará un nuevo resultado, o salida, según como estemos conectando los valores.

En PHP tenemos que tener en cuenta la jerarquía de los operadores lógicos, ya que según que operador lógico estemos usando el resultado obtenido puede cambiar.
Hay que tener en cuenta que si utilizas el operador and, or o xor se estaría haciendo la asignación y después la operación. 
En cambio, si usamos && y || se hace primero la operación y después la asignación.
*/

$valorA = true;
$valorB = true;

$resultado = $valorA and $valorB;
var_dump($resultado);

$resultado = $valorA && $valorB;
var_dump($resultado);

$valorA = true;
$valorB = false;

$resultado = $valorA and $valorB;
var_dump($resultado);

$resultado = $valorA && $valorB;
var_dump($resultado);

$valorA = false;
$valorB = true;

$resultado = $valorA and $valorB;
var_dump($resultado);

$resultado = $valorA && $valorB;
var_dump($resultado);

$valorA = false;
$valorB = false;

$resultado = $valorA and $valorB;
var_dump($resultado);

$resultado = $valorA && $valorB;
var_dump($resultado);

/*
Conectividad Lógica de Conjunción.
Será verdadera si ambas proposiciones son verdaderas; Hay que tener en cuenta que al comparar dos valores disting 
con el operador lógico and primero se asigna el valor y luego lo compara.
Toma el valor true or false de la primera variable que estamos comparando arrojando como resultado el valor de la primera variable
Operador and
Solo es verdadera si ambas proposiciones son verdaderas, y será falsa cuando al menos uno de los valores o proposiciones es falso.
Operador &&
*/

$valorA = false;
$valorB = false;

$resultado = $valorA or $valorB;
var_dump($resultado);

$resultado = $valorA || $valorB;
var_dump($resultado);

$valorA = true;
$valorB = false;

$resultado = $valorA or $valorB;
var_dump($resultado);

$resultado = $valorA || $valorB;
var_dump($resultado);

$valorA = false;
$valorB = true;

$resultado = $valorA or $valorB;
var_dump($resultado);

$resultado = $valorA || $valorB;
var_dump($resultado);

/*
Conectividad Lógica de Disyunción Inclusiva.
Es falso si ambas proposiciones son falsas, y tal como lo observamos con el ejemplo de and, al utilizar el operador lógico or 
primero estamos asignado el valor de la varibale y luego realizamos la operación de comparación.
Es por ello que asignamos el valor de nuestra primera variable y obtendremos false or true de acuerdo al valor que estemos pasando en la primera varible
Operador or
Solo es falso si ambas proposiciones son falsas, y será verdadero cuando al menos uno de los valores o proposiciones es verdadero.
Operador ||
*/

$valorA = true;
$valorB = false;

$resultado = $valorA xor $valorB;
var_dump($resultado);

$resultado = ($valorA xor $valorB);
var_dump($resultado);

/*
Conectividad Lógica de Disyunción Inclusiva.
Dependiendo del primer valor asignado tendremos una salida falsa o verdadera. Recordemos que and, or y xor trabajan segun la precedencia de operadores.
Solo es falso si ambas proposiciones son verdaderas o falsas, y será verdadero cuando al menos uno de los valores o proposiciones es verdadero y el otro falso.
Operador xor envuelto en ()
*/

Operadores Lógicos

Son los operadores que nos ayudan a combinar dos o mas afirmaciones para definir si una oración es cierta o falsa. Su uso esta basado en tablas de verdad.

AND (y)

Se usa para verificar si dos afirmaciones son ciertas, entonces la oración completa es cierta. Si una de ellas es falsa, entonces, la oración completa es falsa.

true AND true = True

false AND true = False

true AND false = False

false AND false = False

Se escribe así:

  • $valor_1 and $valor_2
  • $valor_1 && $valor_2

OR (o)

Si una de las 2 afirmaciones es cierta, entonces la oración completa es cierta. Si solo una de ellas es falsa, entonces, la oración completa es cierta.

true OR true = True

false OR true = True

true OR false = True

false OR false = False

Se escribe así:

  • $valor_1 or $valor_2
  • $valor_1 || $valor_2

NOT (no)

Se usa para invertir el significado de una oración

NOT True ⇒ False

NOT False ⇒ True

XOR

$valor_1 XOR $valor_2 ⇒ false, si ambos son true, true, si solo uno de los es true

si no les reconoce el comando php solo deben agregarlo a sus variables de entorno después de que lo instalaron

Hagan todo tipo de experimentos mezclando con operadores aritméticos
Ojala hubiese visto este video cuando empecé a programar, excelente explicación.

var_dump proporciona información sobre el tamaño y tipo de datos de la variable y, en el caso de arrays y objetos, de los elementos que la componen.

<?php

$a = true && false;
// $a = (true && false);
var_dump($a);
# output: false

$b = true and false;
// ($b = true) and false;
var_dump($b);
# output: true

$c = ($d = true and false);
// $c = (($d = true) and false);
var_dump($c);
#output: false

me está gustando este curso, la profesora explica muy bien

Hola. Les comparto este repositorio que sirve de guía para el examen final, pues contiene las preguntas que se encuentran en el examen, la justificación y el video del curso donde se habla sobre eso. Espero y les sea de utilidad 😄.
Platzi-Test