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

De WikiEducator
Saltar a: navegación, buscar
(Operadores)
(Operadores de expresiones numéricas)
Línea 81: Línea 81:
 
*El operador de ejecución (` `) se utiliza para ejecutar comandos del sistema y devolver su salida.
 
*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===
 +
 +
{| class="wikitable"
 +
|+ style="background:#004080; color:white; font-size:1.25em;" | '''Precedencia y Asociatividad de Operadores en PHP'''
 +
|-
 +
! style="background:#0066CC; color:white;" | '''Asociatividad''' || '''Operadores'''
 +
|-
 +
| style="background:#E6F0FF;" | No asociativo || `clone`, `new`
 +
|-
 +
| style="background:#FFFFFF;" | Izquierda || `[`
 +
|-
 +
| style="background:#E6F0FF;" | Derecha || `**`
 +
|-
 +
| style="background:#FFFFFF;" | Derecha || `++`, `--`, `~`, `(int)`, `(float)`, `(string)`, `(array)`, `(object)`, `(bool)`, `@`
 +
|-
 +
| style="background:#E6F0FF;" | No asociativo || `instanceof`
 +
|-
 +
| style="background:#FFFFFF;" | Derecha || `!`
 +
|-
 +
| style="background:#E6F0FF;" | Izquierda || `*`, `/`, `%`
 +
|-
 +
| style="background:#FFFFFF;" | Izquierda || `+`, `-`, `.`
 +
|-
 +
| style="background:#E6F0FF;" | Izquierda || `<<`, `>>`
 +
|-
 +
| style="background:#FFFFFF;" | No asociativo || `<`, `<=`, `>`, `>=`
 +
|-
 +
| style="background:#E6F0FF;" | No asociativo || `==`, `!=`, `===`, `!==`, `<>`
 +
|-
 +
| style="background:#FFFFFF;" | Izquierda || `&`
 +
|-
 +
| style="background:#E6F0FF;" | Izquierda || `^`
 +
|-
 +
| style="background:#FFFFFF;" | Izquierda || `|`
 +
|-
 +
| style="background:#E6F0FF;" | Izquierda || `&&`
 +
|-
 +
| style="background:#FFFFFF;" | Izquierda || `||`
 +
|-
 +
| style="background:#E6F0FF;" | Izquierda || `?:`
 +
|-
 +
| style="background:#FFFFFF;" | Derecha || `=`, `+=`, `-=`, `*=`, `**=`, `/=`, `.=`, `%=`, `&=`, `/=`, `^=`, `<<=`, `>>=`, `=>`
 +
|-
 +
| style="background:#E6F0FF;" | Izquierda || `and`
 +
|-
 +
| style="background:#FFFFFF;" | Izquierda || `xor`
 +
|-
 +
| style="background:#E6F0FF;" | Izquierda || `or`
 +
|-
 +
| style="background:#FFFFFF;" | Izquierda || `,`
 +
|}
  
 
====Operadores de expresiones numéricas====
 
====Operadores de expresiones numéricas====

Revisión de 20:10 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
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 de expresiones numéricas



Icon key points.gif

Puntos clave

Intervienen con valores numéricos y retorna un número como resultado de su evaluación


  1. Aritméticos (+,-,*,/,%,**)
  2. Autoincremente/decremento(++ --)
  3. Asignación compuesta (los aritmétcios segidos de una asignación += -= *= ....)



Icon key points.gif

Puntos clave

1.- Operadores aritméticos


Cuando haya varios en una operación, hay que tener cuidado con la preferencia. Mejor esplicitarla con paréntesis



Icon qmark.gif
Qué ejecutaría el siguiente código
$num = 5+6*8-4/2;
Mejor ponerlo así
$num = 5+(6*8)-(4/2);



  • El operador quizá menos utilizado es el módulo(%) y el exponente(**).

(Comment.gif: El módulo se usa mucho para ver si un número es o no divisible por otro.)




Icon activity.jpg
Actividad
Buscar todos los números divisibles por 3 del 1 al 100


(Comment.gif: 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


Icon activity.jpg
Actividad
Obtenerlo las diferentes potencias de 2 hasta elevarlo a 15
21 22 23...215




Autoincremente / Decremento
  • el ++, -- son valores de autoincremeto y autodecremento, pueder ser pre o post
  • El el caso pre, primero incrementa y luego toma el valor
  • El el caso post, primero toma el valor y luego incrementa


Icon key points.gif

Puntos clave

Title: forma de usar los operadores

Pre es anteponiendo el operador
++$a;
--$a
Post es posponiéndolo
$a++;
$a--;



Para muchos casos es lo mismo hacerlo pre que post. Esto ocurre cuando en la instrucción solo haga eso
$a=5;
$a++;
echo "Valor de a es $a";

Es igual que

$a=5;
++$a;
echo "Valor de a es $a";
En ambos casos la salida dará el valor 6

Pero

$a=5;
echo "Valor de a es ".++$a."<br />";
echo "Valor de a es $a<br />";

No es igual que

$a=5;
echo "Valor de a es ".$a++."<br />";
echo "Valor de a es $a<br />";



Icon qmark.gif
Pregunta
Lo ves claro


}}



Icon activity.jpg
Realiza el siguiente programa Entendiendo qué hace
//Declara una variable entera y asigna el valor 4
 
//Usando el operador unario, incrementa una unidad y compáralo con el valor 5
//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
//Analiza la salida y prueba deferentes situaciones




Operadores
$a=5;
if ($a++==5)
    echo '$a que vale '.$a.' dice que vale 5 ???? <br>'
        . 'Esto es por que primero compara y luego incrementa<br>';
 
echo 'ahora $a vale '.$a.'<br>';
 
if (++$a==6)
    echo 'esto nunca saldrá ya que $a se incrementa antes de comparar';
else
    echo 'efectivamente ahora $a ya no vale 6 sino '.$a.'<br>';
?>
Operadores
  • El código anterior genera la siguiente salida
 $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

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