Plantilla:ManuelRomero/PHP/OperadoresExpresiones

De WikiEducator
Saltar a: navegación, buscar


Icon key points.gif

Notas importantes sobre expresiones en PHP


  • Una expresión tiene un tipo asociado. Este tipo depende del resultado de su evaluación.
  • En PHP, el operador determina el tipo de la expresión en muchos casos.
  • Los operandos intentan adaptarse al tipo esperado por el operador mediante conversiones automáticas (casting implícito).
  • Una expresión no es una instrucción completa, sino parte de ella. Por ejemplo:
//Instruccion:
 $resultado = 5+3;
 // Expresión =>  5+3
 // Operador =>  +
 // Operandos =>  el 5 y el 3
 // Resultado => 8
 //Tipo de expresión => Aritmética, lo marca el operador


(Comment.gif: Las expresiones son piezas fundamentales en cualquier lenguaje de programación. Es importante identificar sus partes (operadores y operandos) para entender cómo funciona el código. )


Operadores

Los operadores son símbolos que realizan acciones sobre operandos y generan un resultado. Existen diferentes tipos de operadores en función del tipo de operandos y el resultado esperado.


OPERADORES HABITUALES EN PHP
Tipo de Operador Operador Tipo de Expresión
Operadores aritméticos + - * / % ** Numérica
Operadores lógicos AND OR && || ! Lógica
Operadores de comparación == != < > <= >= <=> ?? Lógica
Operadores de auto incremento/decremento ++$a $a++ --$a $a-- Numérica o String
Operadores de string (concatenación) . .= String
OTROS OPERADORES MENOS HABITUALES
Tipo de Operador Operador Tipo de Expresión
Operadores de asignación simple = Valor asignado
Operadores de asignación compuesta += -= *= /= %= **= .= Numérica
Operadores de asignación por referencia & Valor referenciado
Operadores bit a bit & | ^ ~ << >> Numérica
Operador de control de errores @ Silencia errores
Operador de ejecución `comando` Resultado del comando ejecutado



Icon key points.gif

Notas importantes

Notas importantes
  • Algunos operadores, como los de control de errores (@), deben usarse con cuidado, ya que pueden ocultar errores importantes en el código.
  • Los operadores de asignación compuesta permiten realizar operaciones y asignar el resultado en un solo paso.
  • El operador de ejecución (` `) se utiliza para ejecutar comandos del sistema y devolver su salida.



Precedencia de Operadores en PHP

  • La precedencia de los operadores define el orden en que se evalúan cuando hay múltiples operadores en una expresión.
  • Sigue las reglas básicas de las matemáticas:
 - La multiplicación y división tienen mayor prioridad que la suma y la resta.  
 - Los paréntesis siempre tienen la mayor precedencia.
  • Cuando varios operadores tienen la misma precedencia, la asociatividad determina cómo se agrupan:
 - Ejemplo (asociatividad izquierda): `1 + 2 + 3` se evalúa como `(1 + 2) + 3`.  
 - Ejemplo (asociatividad derecha): `$x = $y = $z` se evalúa como `$x = ($y = $z)`.
  • Algunos operadores no tienen asociatividad y no pueden combinarse directamente.
 - Ejemplo incorrecto: `1 < 2 > 1`.  

Nota importante: Usar paréntesis puede hacer que las expresiones sean más legibles, aunque no sean necesarios.

Tabla de Precedencia de Operadores

Precedencia y Asociatividad de Operadores en PHP
Asociatividad Operadores
No asociativo `clone`, `new`
Izquierda `[`
Derecha `**`
Derecha `++`, `--`, `~`, `(int)`, `(float)`, `(string)`, `(array)`, `(object)`, `(bool)`, `@`
No asociativo `instanceof`
Derecha `!`
Izquierda `*`, `/`, `%`
Izquierda `+`, `-`, `.`
Izquierda `<<`, `>>`
No asociativo `<`, `<=`, `>`, `>=`
No asociativo `==`, `!=`, `===`, `!==`, `<>`
Izquierda `&`
Izquierda `^`
Izquierda `
Izquierda `&&`
Izquierda ` `
Izquierda `?:`
Derecha `=`, `+=`, `-=`, `*=`, `**=`, `/=`, `.=`, `%=`, `&=`, `/=`, `^=`, `<<=`, `>>=`, `=>`
Izquierda `and`
Izquierda `xor`
Izquierda `or`
Izquierda `,`

Operadores Aritméticos

Los operadores aritméticos en PHP son similares a los de las matemáticas y realizan operaciones básicas.

Operadores Aritméticos
Operación Representación Descripción
Suma
$x + $y
Devuelve la suma de $x y $y.
Resta
$x - $y
Devuelve la diferencia entre $x y $y.
Multiplicación
$x * $y
Devuelve el producto de $x y $y.
División
$x / $y
Devuelve el cociente de $x dividido por $y. Si ambos son divisibles, devuelve un entero; de lo contrario, un flotante.
Módulo
$x % $y
Devuelve el resto de dividir $x entre $y. Si $x o $y son flotantes, se transforman en enteros antes de la operación.
Exponenciación
$x ** $y
Eleva $x a la potencia de $y.
Negación
-$x
Cambia el signo de $x.

Notas importantes:

  • En módulo, el signo del resultado dependerá del dividendo.
Ejemplo:
-5 % 3
devolverá
-2
.
  • El exponente eleva un número a otro. Ejemplo:
    2 ** 3
    devolverá
    8
    .

Ejemplos Prácticos

1. Preferencia de Operadores:

$num = 5 + 6 * 8 - 4 / 2;
// Mejor usar paréntesis para mayor claridad:
$num = 5 + (6 * 8) - (4 / 2);

Ejecución paso a paso:

$num = 5 + 48 - 2;
$num = 53 - 2;
$num = 51;

2. Uso del módulo:


Icon activity.jpg
Actividad
Buscar los números divisibles por 3 entre 1 y 100.




3. Exponenciación:


Icon activity.jpg
Actividad
Calcular las potencias de 2 del 1 al 15




---

Operadores de Incremento y Decremento

Los operadores de incremento y decremento permiten aumentar o reducir en 1 el valor de una variable.

Incremento y Decremento
Tipo Representación Descripción
Pre-incremento
++$a
Incrementa el valor de $a antes de usarlo.
Post-incremento
$a++
Usa el valor de $a y luego lo incrementa.
Pre-decremento
--$a
Decrementa el valor de $a antes de usarlo.
Post-decremento
$a--
Usa el valor de $a y luego lo decrementa.

Ejemplo de Diferencias entre Pre y Post:

// Pre-incremento
$a = 5;
echo "Pre-incremento: " . ++$a; // Muestra 6
 
// Post-incremento
$a = 5;
echo "Post-incremento: " . $a++; // Muestra 5
echo "Nuevo valor: " . $a; // Muestra 6


(Comment.gif: Cuando los operadores de incremento/decremento están en una instrucción más compleja, su posición (pre o post) puede afectar el resultado.)



Operadores de Asignación

Tabla de Operadores de Asignación en PHP
Categoría Operador Ejemplo Descripción
Asignación básica =
$x = 10;
Asigna el valor de la derecha a la variable de la izquierda.
Asignación básica (arrays) =>
$array = ["clave" => "valor"];
Asigna un valor a una clave en un array asociativo.
Asignación por referencia &
$y = &$x;
Asigna una referencia a otra variable, ambas apuntan al mismo valor.
Asignación compuesta +=
$x += 5;
Suma 5 al valor de $x y asigna el resultado a $x.
Asignación compuesta -=
$x -= 3;
Resta 3 al valor de $x y asigna el resultado a $x.
Asignación compuesta *=
$x *= 2;
Multiplica $x por 2 y asigna el resultado a $x.
Asignación compuesta /=
$x /= 4;
Divide $x entre 4 y asigna el resultado a $x.
Asignación compuesta  %=
$x %= 3;
Asigna a $x el resto de la división de $x entre 3.
Asignación compuesta (concatenación) .=
$y .= " mundo";
Concatena " mundo" al valor de $y y asigna el resultado a $y.
Asignación compuesta (exponenciación) **=
$x **= 3;
Eleva $x a la potencia de 3 y asigna el resultado a $x.

Los operadores de asignación permiten asignar un valor a una variable. Existen dos tipos principales:

  • Básicos: Usan el operador "=" para asignar un valor.
  • Combinados Combina un operador aritmético o de concatenación con la asignación. Siempre van precedidos por el punto antes de la operador antes de la asignación.

Operador de Asignación Básico

El operador "=" asigna un valor, pero no actúa como un igual matemático. La asignación retorna el valor que se asignó. Por ejemplo:

//Simple curiosidad que tiene consecuencias en las estructuras de control
$x = 3;
// La expresión $x = 3 tiene un valor de 3
echo $x; // Mostrará: 3

En el caso de los **arrays**, el operador "=>" se utiliza para asignar valores a claves nombradas:

$array = ["clave1" => "valor1", "clave2" => "valor2"];
echo $array["clave1"]; // Mostrará: valor1

Operadores de Asignación Combinados

Los operadores de asignación combinados permiten realizar una operación y asignar el resultado a la misma variable en un solo paso.

Ejemplo básico:

$x = 3;
$x += 5; // Suma 5 a $x, 
$x=$x+3; //Esto es la misma acción que la instrucción anterior
echo $x; // Mostrará: 8

Esto es equivalente a:

$x = $x + 5;

Otros operadores combinados:

$y = "Hola";
$y .= ", ¿Qué tal?"; // Concatenación
echo $y; // Mostrará: Hola, ¿Qué tal?

Ejemplo con Operadores de Asignación Combinados

$b = 1;
for ($a = 0; $a < 10; $a++) {
    $b *= 10; // Multiplica $b por 10 en cada iteración
    echo "Valor de \$b = " . $b . "<br>";
}

Salida del código anterior:

Valor de $b = 10
Valor de $b = 100
Valor de $b = 1000
Valor de $b = 10000
Valor de $b = 100000
Valor de $b = 1000000
Valor de $b = 10000000
Valor de $b = 100000000
Valor de $b = 1000000000
Valor de $b = 10000000000

Asignación por Referencia

La asignación por referencia permite que dos variables apunten al mismo valor, sin crear copias. Esto se realiza con el operador "&".

Ejemplo:

$x = 3;
$y = &$x; // $y apunta a la misma referencia que $x
 
echo "$x, $y"; // Mostrará: 3, 3
 
$x = 5;
echo "$x, $y"; // Mostrará: 5, 5


(Comment.gif: Las referencias son similares a un alias o acceso directo en el sistema de archivos.)



Operadores de Comparación

Los operadores de comparación permiten comparar dos valores y devuelven un resultado booleano (`true` o `false`). El resultado depende de los tipos de los valores comparados y de las reglas de conversión de tipos de PHP.

Tabla de Operadores de Comparación

Operadores de Comparación
Ejemplo Nombre Resultado
$x == $y
Igual Devuelve `true` si $x y $y tienen el mismo valor, independientemente del tipo.
$x === $y
Idéntico Devuelve `true` sólo si $x y $y tienen el mismo valor y el mismo tipo.
$x != $y
Distinto Devuelve `true` si $x y $y son diferentes, independientemente del tipo.
$x <> $y
Distinto Igual que `!=`.
$x !== $y
No idéntico Devuelve `true` si $x y $y no son iguales o no son del mismo tipo.
$x < $y
Menor que Devuelve `true` si $x es menor que $y.
$x > $y
Mayor que Devuelve `true` si $x es mayor que $y.
$x <= $y
Menor o igual que Devuelve `true` si $x es menor o igual que $y.
$x >= $y
Mayor o igual que Devuelve `true` si $x es mayor o igual que $y.

Comparación Flexible (==) vs Estricta (===)

Cuando se comparan dos valores, es importante entender la diferencia entre == (comparación flexible) y === (comparación estricta).

Ejemplo:

$num = 1;
 
if ($num == true) {
    echo '$num es igual a true<br>';
}
 
if ($num === true) {
    echo "Esto nunca se ejecutará";
} else {
    echo '$num no es exactamente igual a true';
}

Salida esperada:

$num es igual a true
$num no es exactamente igual a true

Notas:

  • `==` compara valores, permitiendo conversiones de tipo.
  • `===` compara valores y tipos, sin conversiones.

Comparaciones Entre Tipos

La forma en que PHP compara diferentes tipos puede variar dependiendo de las reglas de conversión.

Comparación Entre Tipos
$x $y Resultado
_null_ o _string_ _string_ _null_ se convierte en `""`, luego se compara numéricamente o léxicamente.
_bool_ o _null_ cualquiera Ambos valores se convierten a booleanos. `false` < `true`.
_object_ _object_ Dos objetos son iguales si tienen los mismos atributos y valores. Son idénticos si además apuntan a la misma instancia.
_string_, _resource_ o _number_ _string_, _resource_ o _number_ Se convierten a números y se comparan matemáticamente.
_array_ _array_ Se comparan elemento por elemento. Si los arrays tienen distinto número de elementos o claves no coincidentes, son incomparables.
_object_ cualquiera Los objetos son siempre mayores que otros tipos.
_array_ cualquiera Los arrays son siempre mayores que otros tipos.

Importante: Las comparaciones entre tipos no numéricos pueden ser confusas. Consulta la [documentación oficial de comparación de tipos](http://php.net/manual/es/types.comparisons.php) para más detalles.

Operadores Bit a Bit

Los operadores bit a bit permiten la evaluación y manipulación de bits específicos dentro de un número entero (`integer`).

Tabla de Operadores Bit a Bit

Operadores Bit a Bit
Ejemplo Nombre Descripción
$x & $y
And Realiza una operación AND entre cada bit de $x y $y.
$x | $y
Or Realiza una operación OR entre cada bit de $x y $y.
$x ^ $y
Xor Realiza una operación XOR entre cada bit de $x y $y.
~$x
Not Invierte todos los bits de $x.
$x << $y
Shift left Desplaza los bits de $x hacia la izquierda $y posiciones.
$x >> $y
Shift right Desplaza los bits de $x hacia la derecha $y posiciones.

Ejemplos Prácticos

1. **Operador AND (&):**

   $x = 6; // 6 en binario: 110
   $y = 3; // 3 en binario: 011
   $resultado = $x & $y; // Resultado: 2 (010 en binario)
   echo "$x & $y = $resultado"; // Mostrará: 6 & 3 = 2

2. **Operador OR (|):**

   $x = 6; // 6 en binario: 110
   $y = 3; // 3 en binario: 011
   $resultado = $x | $y; // Resultado: 7 (111 en binario)
   echo "$x | $y = $resultado"; // Mostrará: 6 | 3 = 7

3. **Operador XOR (^):**

   $x = 6; // 6 en binario: 110
   $y = 3; // 3 en binario: 011
   $resultado = $x ^ $y; // Resultado: 5 (101 en binario)
   echo "$x ^ $y = $resultado"; // Mostrará: 6 ^ 3 = 5

4. **Operador NOT (~):**

   $x = 6; // 6 en binario: 110
   $resultado = ~$x; // Resultado: -7 (depende de la representación complementaria a dos)
   echo "~$x = $resultado"; // Mostrará: ~6 = -7

5. **Shift Left (<<):**

   $x = 2; // 2 en binario: 10
   $resultado = $x << 1; // Desplaza los bits hacia la izquierda 1 posición: 100 (4 en decimal)
   echo "$x << 1 = $resultado"; // Mostrará: 2 << 1 = 4

6. **Shift Right (>>):**

   $x = 4; // 4 en binario: 100
   $resultado = $x >> 1; // Desplaza los bits hacia la derecha 1 posición: 10 (2 en decimal)
   echo "$x >> 1 = $resultado"; // Mostrará: 4 >> 1 = 2

Notas Importantes

  • Los operadores bit a bit trabajan directamente sobre la representación binaria de los números.
  • Los desplazamientos (`<<` y `>>`) pueden ser útiles para operaciones de bajo nivel como optimización de cálculos o manejo de banderas.
  • El operador `~` puede producir resultados inesperados debido a la representación de enteros en PHP (complemento a dos).

Actividad Práctica

Objetivo: Escribir un programa que: 1. Realice operaciones AND, OR, XOR y NOT con dos números. 2. Desplace un número hacia la izquierda y hacia la derecha.

Plantilla de Ejemplo:

<?php
// 1. Operaciones bit a bit
$a = 5; // 101 en binario
$b = 3; // 011 en binario
 
echo "$a & $b = " . ($a & $b) . "<br>"; // AND
echo "$a | $b = " . ($a | $b) . "<br>"; // OR
echo "$a ^ $b = " . ($a ^ $b) . "<br>"; // XOR
echo "~$a = " . (~$a) . "<br>"; // NOT
 
// 2. Desplazamiento
echo "$a << 1 = " . ($a << 1) . "<br>"; // Shift left
echo "$a >> 1 = " . ($a >> 1) . "<br>"; // Shift right
?>

Resumen

  • Los operadores básicos asignan valores directamente.
  • Los operadores combinados simplifican las expresiones cuando la misma variable participa en la operación.
  • La asignación por referencia permite que múltiples variables compartan un mismo valor sin duplicarlo.

Actividad Práctica

Objetivo: Practicar con operadores de asignación básicos, combinados y por referencia.

1. Escribe un programa que utilice al menos dos operadores básicos y dos combinados. 2. Implementa un ejemplo de asignación por referencia. 3. Evalúa el resultado e incluye una breve explicación.

Plantilla de Ejemplo:

<?php
// 1. Operadores básicos
$x = 10;
$y = "Hola";
 
// 2. Operadores combinados
$x += 5; // $x es ahora 15
$y .= ", ¿Qué tal?"; // $y es ahora "Hola, ¿Qué tal?"
 
// 3. Asignación por referencia
$z = &$x; // $z apunta a la misma referencia que $x
$z = 20; // Cambiar $z también afecta a $x
 
// Muestra los resultados
echo "Valor de x: $x\n"; // Debería mostrar 20
echo "Valor de y: $y\n"; // Debería mostrar "Hola, ¿Qué tal?"
echo "Valor de z: $z\n"; // Debería mostrar 20
?>




Operadores con asignación en una misma variable

  • Cuando la variable donde asignamos el resultado de la expresión forma parte de la expresión, la podemos simplificar
  • Veamos el siguiente ejemplo
$a=$a*5;
  • Es igual que hacer
$a*=5;
  • Esto lo podemos hacer con cualquiera de los operadores aritméticos



Operadores comparación (==,<,>,>=,<=,<>,!=,===,!==)

Este tipo de operadores genera un booleano como resultado de evaluar la expresión


Icon key points.gif

Puntos clave

  • == operador de comparación igual que (mismo valor)
  • === operador de comparación exactamente igual que (mismo valor y tipo)


Operador == Vs ===
$num=1;
if ($num==true)
    echo '$num es igual a true<br>';
if ($num===true){
    echo "esto nunca se ejecutará";
}else
    echo '$num no es exactamente igual a true';
Operador == vs ===
  • El código anterior generaría la siguiente salida
$num es igual a true
$num no es exactamente igual a true
  • Ver la sección comparación de tipos de la página oficial
http://php.net/manual/es/language.operators.comparison.php

operadores de concatenacón( .) concatena cadena de caracteres.

El operador + no está sobre cargado, observa el siguiente código
$nombre="Maria";
$apellido = " de la Oh";
 
$nombreCompleto = $nombre.$apellido;
echo "el valor de nombre completo es $nombreCompleto ---<br>";
 
$nombreCompleto = $nombre+$apellido;
echo "el valor de nombre completo es $nombreCompleto --<br>";
La salida del código anterior sería
el valor de nombre completo es Maria de la Oh ---
el valor de nombre completo es 0 --

Operadores de asignación (= , =>)

Se pueden combinar con los aritméticos (+=, *=, ...) y con los de concatenación (.=)
En este caso el valor de la variable de la izquierda se toma como primero operando
Operador de asignación
<?php
$b=1;
for ($a=0;$a<10;$a++){
    $b*=10;
    echo 'valor de $b ='.$b.'<br>';
}
?>
  • El código anterior genera la siguiente salida
valor de $b =10
valor de $b =100
valor de $b =1000
valor de $b =10000
valor de $b =100000
valor de $b =1000000
valor de $b =10000000
valor de $b =100000000
valor de $b =1000000000
valor de $b =10000000000

Operadores de ejecución (``)

PHP proporciona un operador especial que permite ejecutar sentencias
  • Observa el siguiente código
<?php
$Discos = `df`;
echo "<pre>$Discos</pre>";
?>
  • El código anterior generará la siguiente salida
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda5       86378608  6072360  75895384   8% /
none                   4        0         4   0% /sys/fs/cgroup
udev             4023720        4   4023716   1% /dev
tmpfs             806904     1384    805520   1% /run
none                5120        0      5120   0% /run/lock
none             4034504     6588   4027916   1% /run/shm
none              102400       28    102372   1% /run/user
/dev/sda7      101797224 40480360  56122728  42% /home
Invocando funciones del sistema
  • El operador anterior (comillas invertidas) es igual que la función shell_exec()
http://php.net/manual/es/function.shell-exec.php

Operadores lógicos (and,&&, or, ||, xor !)

http://php.net/manual/es/language.operators.logical.php
Funcionan por cortocircuito
El operador xor da verdad si los operando son de diferente valor uno true y el otro false
La notación and y && representan el mismo operador, igual ocurre con or y ||
  • La diferencia entre los operadores es la prioridad
http://php.net/manual/es/language.operators.precedence.php