Diferencia entre revisiones de «Plantilla:ManuelRomero/PHP/OperadoresExpresiones»

De WikiEducator
Saltar a: navegación, buscar
(Operadores)
(Operadores de expresiones numéricas)
Línea 148: Línea 148:
 
|}
 
|}
  
====Operadores de expresiones numéricas====
+
===Operadores Aritméticos===
<br />
+
 
{{MRM_Puntos clave|
+
Los '''operadores aritméticos en PHP''' son similares a los de las matemáticas y realizan operaciones básicas.
;Intervienen con valores numéricos y retorna un número como resultado de su evaluación
+
 
}}
+
{| class="wikitable"
#Aritméticos (+,-,*,/,%,**)
+
|+ style="background:#004080; color:white; font-size:1.25em;" | '''Operadores Aritméticos'''
#Autoincremente/decremento(++ --)
+
|-
#Asignación compuesta (los aritmétcios segidos de una asignación += -= *= ....)
+
! style="background:#0066CC; color:white;" | '''Operación''' || '''Representación''' || '''Descripción'''
 +
|-
 +
| style="background:#E6F0FF;" | Suma || <source lang=php>$x + $y</source> || Devuelve la suma de $x y $y.
 +
|-
 +
| style="background:#FFFFFF;" | Resta || <source lang=php>$x - $y</source> || Devuelve la diferencia entre $x y $y.
 +
|-
 +
| style="background:#E6F0FF;" | Multiplicación || <source lang=php>$x * $y</source> || Devuelve el producto de $x y $y.
 +
|-
 +
| style="background:#FFFFFF;" | División || <source lang=php>$x / $y</source> || Devuelve el cociente de $x dividido por $y. Si ambos son divisibles, devuelve un entero; de lo contrario, un flotante.
 +
|-
 +
| style="background:#E6F0FF;" | Módulo || <source lang=php>$x % $y</source> || Devuelve el resto de dividir $x entre $y. Si $x o $y son flotantes, se transforman en enteros antes de la operación.
 +
|-
 +
| style="background:#FFFFFF;" | Exponenciación || <source lang=php>$x ** $y</source> || Eleva $x a la potencia de $y.
 +
|-
 +
| style="background:#E6F0FF;" | Negación || <source lang=php>-$x</source> || Cambia el signo de $x.
 +
|}
 +
 
 +
'''Notas importantes:'''
 +
* En '''módulo''', el signo del resultado dependerá del dividendo.
 +
  Ejemplo: <source lang=php>-5 % 3</source> devolverá <source lang=php>-2</source>.
 +
* El '''exponente''' eleva un número a otro. Ejemplo: <source lang=php>2 ** 3</source> devolverá <source lang=php>8</source>.
 +
 
 +
====Ejemplos Prácticos====
  
{{MRM_Puntos clave|title=Valor de retorno|
+
'''1. Preferencia de Operadores:'''
===== 1.- Operadores aritméticos=====
+
<br />
+
;Cuando haya varios en una operación, hay que tener cuidado con la preferencia. Mejor esplicitarla con paréntesis}}
+
{{MRM_Pregunta|Title=Qué ejecutaría el siguiente código|
+
 
<source lang=php>
 
<source lang=php>
$num = 5+6*8-4/2;
+
$num = 5 + 6 * 8 - 4 / 2;
 +
// Mejor usar paréntesis para mayor claridad:
 +
$num = 5 + (6 * 8) - (4 / 2);
 
</source>
 
</source>
;Mejor ponerlo así
+
 
 +
'''Ejecución paso a paso:'''
 
<source lang=php>
 
<source lang=php>
$num = 5+(6*8)-(4/2);
+
$num = 5 + 48 - 2;
 +
$num = 53 - 2;
 +
$num = 51;
 
</source>
 
</source>
{{Plegable|hide|Ejecución|
 
<source lang=php>
 
$num = 5+6*8-4/2;
 
echo "<h1>Valor de número $num</h1>";
 
$num = 5+(6*8)-(4/2);
 
$num = 5+48-2;
 
$num = 53-2;
 
echo "<h1>Valor de número $num</h1>";
 
</source>
 
;Salida
 
[[Archivo:salida_preferencia_1.png]]
 
}}
 
}}
 
<br />
 
*El operador quizá menos utilizado es el <span class=r>módulo(%) y el exponente(**)</span>.
 
{{Nota|El módulo se usa mucho para ver si un número es o no divisible por otro.}}
 
  
 +
'''2. Uso del módulo:'''
 
{{MRM_Actividad|
 
{{MRM_Actividad|
;Buscar todos los números divisibles por 3 del 1 al 100
+
; Buscar los números divisibles por 3 entre 1 y 100.
 
+
 
{{Plegable|hide|Posible solución|
 
{{Plegable|hide|Posible solución|
 
<source lang=php>
 
<source lang=php>
$lista = null;
+
for ($n = 1; $n <= 100; $n++) {
for($n=1; $n<=100; $n++){
+
     if ($n % 3 == 0) {
     if ($n%3==0)
+
         echo "$n, ";
         $lista.="$n, ";
+
    }
 
}
 
}
echo "<h1>$lista</h1>";
 
 
</source>
 
</source>
;Salida
+
; Salida: Números divisibles por 3 con una coma al final.
[[Archivo:salida_multiplos_3.png]]
+
 
}}
 
}}
 
 
{{Nota|En el ejemplo anterior, al final sale una coma de más, que ya veremos cómo quitarla.}}
 
 
}}
 
}}
  
;El exponente consiste en elevar un número  a otro
+
'''3. Exponenciación:'''
 
{{MRM_Actividad|
 
{{MRM_Actividad|
;Obtenerlo las diferentes potencias de 2 hasta elevarlo a 15:   2<sup>1</sup> 2<sup>2</sup> 2<sup>3</sup>...2<sup>15</sup>
+
; Calcular las potencias de 2 del 1 al 15:
 
{{Plegable|hide|Posible solución|
 
{{Plegable|hide|Posible solución|
 
<source lang=php>
 
<source lang=php>
for($n=1; $n<=15; $n++){
+
for ($n = 1; $n <= 15; $n++) {
     echo "2<sup>$n</sup>=".(2**$n)."<br />";
+
     echo "2^$n = " . (2 ** $n) . "<br />";
 
}
 
}
 
</source>
 
</source>
;Salida
 
[[Archivo:salida_potencias_2.png]]
 
 
}}
 
}}
 
}}
 
}}
<br />
 
=====Autoincremente / Decremento =====
 
*el <span class=r>++, --</span> son valores de autoincremeto y autodecremento, pueder ser <span class=r>pre o post</span>
 
*El el caso '''''pre''''', primero incrementa y luego toma el valor
 
*El el caso '''''post''''', primero  toma el valor y luego incrementa
 
{{
 
MRM_Puntos clave|Title: forma de usar los operadores
 
;Pre  es anteponiendo el operador
 
<source lang=php>
 
++$a;
 
--$a
 
</source>
 
:Post es posponiéndolo
 
<source lang=php>
 
$a++;
 
$a--;
 
</source>
 
}}
 
<br />
 
;Para muchos casos es lo mismo hacerlo pre que post. Esto ocurre  <span class=r>cuando en la instrucción solo haga eso</span>
 
<source lang=php>
 
$a=5;
 
$a++;
 
echo "Valor de a es $a";
 
</source>
 
Es igual que
 
<source lang=php>
 
$a=5;
 
++$a;
 
echo "Valor de a es $a";
 
</source>
 
;En ambos casos la salida dará el valor 6
 
Pero
 
<source lang=php>
 
$a=5;
 
echo "Valor de a es ".++$a."<br />";
 
echo "Valor de a es $a<br />";
 
</source>
 
No es igual que
 
<source lang=php>
 
$a=5;
 
echo "Valor de a es ".$a++."<br />";
 
echo "Valor de a es $a<br />";
 
</source>
 
{{MRM_Pregunta|
 
'''''Lo ves claro'''''
 
}}
 
}}
 
</div>
 
  
{{MRM_Actividad|Title=Realiza el siguiente programa Entendiendo qué hace|
+
---
<source lang=php>
+
//Declara una variable entera y asigna el valor 4
+
  
//Usando el operador unario, incrementa una unidad y compáralo con el valor 5
+
===Operadores de Incremento y Decremento===
//Muestra un mensaje mostrando su valor
+
  
//Compáralo con el valor  4 y decrementa en una unidad , muestra información de que no es igual y muestra el valor
+
Los operadores de '''incremento y decremento''' permiten aumentar o reducir en 1 el valor de una variable.
//Analiza la salida y prueba deferentes situaciones
+
 
</source>
+
{| class="wikitable"
}}
+
|+ style="background:#004080; color:white; font-size:1.25em;" | '''Incremento y Decremento'''
 +
|-
 +
! style="background:#0066CC; color:white;" | '''Tipo''' || '''Representación''' || '''Descripción'''
 +
|-
 +
| style="background:#E6F0FF;" | Pre-incremento || <source lang=php>++$a</source> || Incrementa el valor de $a antes de usarlo.
 +
|-
 +
| style="background:#FFFFFF;" | Post-incremento || <source lang=php>$a++</source> || Usa el valor de $a y luego lo incrementa.
 +
|-
 +
| style="background:#E6F0FF;" | Pre-decremento || <source lang=php>--$a</source> || Decrementa el valor de $a antes de usarlo.
 +
|-
 +
| style="background:#FFFFFF;" | Post-decremento || <source lang=php>$a--</source> || Usa el valor de $a y luego lo decrementa.
 +
|}
  
<div class="slide">
+
====Ejemplo de Diferencias entre Pre y Post:====
;Operadores
+
 
<source lang=php>
 
<source lang=php>
$a=5;
+
// Pre-incremento
if ($a++==5)
+
$a = 5;
    echo '$a que vale '.$a.' dice que vale 5 ???? <br>'
+
echo "Pre-incremento: " . ++$a; // Muestra 6
        . 'Esto es por que primero compara y luego incrementa<br>';
+
  
echo 'ahora $a vale '.$a.'<br>';
+
// Post-incremento
 
+
$a = 5;
if (++$a==6)
+
echo "Post-incremento: " . $a++; // Muestra 5
    echo 'esto nunca saldrá ya que $a se incrementa antes de comparar';
+
echo "Nuevo valor: " . $a; // Muestra 6
else
+
    echo 'efectivamente ahora $a ya no vale 6 sino '.$a.'<br>';
+
?>
+
 
</source>
 
</source>
</div>
 
  
<div class="slide">
+
'''Nota:''' 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
+
 
*El código anterior genera la siguiente salida
+
---
<source lang=php>
+
$a que vale 6 dice que vale 5 ????
+
Esto es por que primero compara y luego incrementa
+
ahora $a vale 6
+
efectivamente ahora $a ya no vale 6 sino 7
+
</source>
+
</div>
+
  
 
====Operadores con asignación en una misma variable====
 
====Operadores con asignación en una misma variable====

Revisión de 21:40 28 nov 2024


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

Nota: 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 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