Usuario:ManuelRomero/ProgramacionWeb/Distancia2018/Sintaxis/1

De WikiEducator
Saltar a: navegación, buscar



DWES TituloTema3.gif


Operadores y expresiones



Icon define.gif
¿Qué es una expresión?
  • Son partes de las frases de un lenguaje de programación


Icon define.gif
Definición
Es un conjunto de operador/es y operando/s
que se evalúan
y dan como resultado un valor




Icon key points.gif

Notas importantes

Una expresión tiene un tipo asociado
En php el tipo lo marca el operador
Los operandos se intentan adaptar al tipo
No es una instrucción, es parte de ella


Operadores

  • Son símbolos que realizan acciones sobre operandos y dan como resultado un valor
  • Tenemos diferentes tipos de operadores en función del tipo de operandos y del resultado


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 asignación simple = valor asignado
Operadores asignación compuesta += *= -= %= **= .= numérico
Operadores asignación por referenica & Valor referenciado
Operadores bit a bit & | ^ ~ << >> numérico
Operador de control de errors @ no retorna, anula comunicaicón de errores si se produjeran
Operador de ejecución `` resultado del comando ejecutado


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

Funciones propias de php sobre tipos y valores

http://php.net/manual/es/ref.var.php
  • Existen una serie (muchas) de funciones que son interesantes de conocer
  • Estas funciones ya están creadas y se pueden usar directamente
  • Están relacionadas con los tipos de datos y valores
  • Alguna de ellas son extremadamente útiles y utilizadas, por ejemplo antes de procesar un dato, hay que ver que dicho dato tenga valor.
  • A continuación trataremos alguna de ellas
var_dump
 void var_dump($expresion)
  • Nos da información sobre la estructura de un valor resultado de una expresion
isset
 bool isset ( $variable )
  • verifica que una variable tiene valor (está definida y no tiene un valor null)
<?php
 $VariableValor= 5;
 print ("El valor de la variable es $VariableValor");
 print ("El valor de otra variable es $OtraVariableValor");
 if (isset($VariableValor))
     print ("VariableValor tiene valor asignado");
 else
     print ("VariableValor no no tiene valor asignado");
 if (isset($OtraVariableValor))
     print ("OtraVariableValor tiene valor asignado");
 else
     print ("OtraVariableValor no no tiene valor asignado");
  ?>

Funciones para determinar existencia de variables

Tenemos tres funciones muy parecidas pero no del todo iguales

Función Significado
is_null($variable) Determina si una variable ($variable) tiene valor null
empty($variable) Determina si una variable ($variables)está vacía
isset($variable) Determina is una variable ha sido definida y no tiene un valor vacío.
  • Es importante saber qué es para php un valor nulo, o si está vacía que no son conceptos sinónimos
Valor null
 $a=null //$a tiene valor null.
 is_null($a) //true
 unset($a) //Se destruye la variable y toma el valor null
 is_null($a) //true
 //$b una variable que no existe tiene el valor null
 is_null($b) //true
Variable vacía
 $a=null //$a está vacía
 empty($a) //true
 $a="";
 empty($a) //true
 $a="hola";
 empty($a) //false
 unset($a);
 empty($a) //true
 $a=false;
 empty($a) //true !OJO!
 $a=0;
 empty($a) //true !OJO!
  • Puedes ver la siguiente app en la que puedes aportar valores
http://manuel.infenlaces.com/apuntes/existencia_valor_variables
  • Tener en cuenta que si evaluamos si una variable está vacía no es
empty
bool empty ($varriable)
  • Determina si una variable no existe. Devuelve true si no existe o su valor está vacío


Icon activity.jpg
Actividad

Probamos las fuciones var_dump() que nos da información sobre el valor y el tipo



Icon activity.jpg
Actividad

Usando la función xxxyyy donde xxx e yyy será dec oct bin o hex para convertir el valor de un sistema numérico a otro



Icon activity.jpg
Actividad
  • Define las siguientes variables que se especifican en el código siguiente y verifica el resultado con empty()
 $num=0;
 $nombre="";
 $nombre=null;
 $nombre="0";
 $pregunta = FALSE;



gettype]
  • Devuelve el tipo de una variable
string gettype($variable)
[1]is-double is-int, is-xxx
  • son funciones donde xxx especificado en el último nombre, puede ser cualquiera de los tipos

Funciones is-xxx.png

  • Todas ellas devuelve un booleano que indica si la variable, valor o expresion es o no de ese tipo,
string is_int($variable);
string is_double($variable);
string is_bool($variable);
string is_integer($variable);
string is_null($variable);
string is_string($variable);
...


Icon activity.jpg
Actividad

Visualizar de qué tipo es la expresión mostrada en el código siguiente y visualiza el valor de la expresión


  $a=5;


unset
  • Destruye la variable especificada perdiéndose su valor

void unset ($var)

Funciones de fechas

  • En php hay muchas fucniones para gestionar fechas, siendo esta una tarea frecuente el las aplicaciones web.


Icon inter.gif
Referencias de funciones de fechas en php
https://www.php.net/manual/es/ref.datetime.php


  • Vamos a estudiar 5 funciones siendo dos de ellas muy utilizadas



  • En php se trabaja mucho con las fechas. Para tal cometido existe una clase llamada DateTime y DateTimeInterface (https://www.php.net/manual/es/class.datetime.php), pero muchas de sus acciones se pueden hacer de forma imperativa con funciones que vamos a ver.

time()

Obtiene una marca de tiempo 
https://www.php.net/manual/es/function.time.php
  • Esta es una función muy importante en php que conviene entender bien.
  • Me retorna el número de segundos transcurridos desde el 1 de Enero de 1970 00:00:00 GMT.

Esta fecha está relacionada con el sistema operativo UNIX que empezó a hacerse visible a partir del año 1970




  • La función time retorna un entero largo numérico


Icon activity.jpg
usar time()
  • Prueba a visualizar el retorno de la función time()
  • Mira lo que ocurre si recargas la página en ejecución, como se van actualizando los segundos



Icon qmark.gif
Pregunta
Entiendes por qué camba el valor






date()

  • La función convierte un timestamp en una fecha como cadena de caracteres con el formato que le especifiquemos
  • Para ver los metaracteres que representan el formato puedes ver la referencia web de la función

Esta función admite dos parámetros, uno de ellos es obligatoria


Icon activity.jpg
funcion date()
data("formato_fecha", "timestamp") 
parámetro 1
formato_fecha

Es un string formado por metacaracteres y caracteres literales que establece el formato en el cual queremos ver la fecha (d/m/y H:i:s), por ejemplo, donde d representa el número de día, m del mes ... y los caracteres / y : apareceran literales en la cadena

parametro 2
timestamp

Es una fecha en formato timestamp o entero largo como segundos desde una fecha Si no se establece, se toma el instante actual, es decir el resultado de la función time()





Icon activity.jpg
Ejemplo de uso de date
<?php
 
$fecha_actual =date("d/m/Y H:i:s");
echo "<h1>La fecha actual es $fecha_actual</h1>";
 
$fecha_futura =date("d/m/Y H:i:s", time()+24*60*60);
echo "<h1>La fecha de mañana será  $fecha_futura</h1>";





strtotime()

Convierte un string a fecha. https://www.php.net/manual/es/function.strtotime.php
  • Esta función admite dos parámetros, uno de ellos es obligatoria


Icon activity.jpg
funcion strtotime
strtotime("fecha_como_string", "timestamp") 
parámetro 1
fecha_como_string
Es una cadena que representa una fecha
Debemos facilitarla con el formato que entienda el sistema 
Por defecto "mes/dia/year"
parametro 2
timestamp
Es una fecha en formato timestamp o entero largo como segundos desde una fecha
Icon present.gif
Tip: Recuerda que stamptime es un entero largo que respresenta un número de segundos desde el 1 de enero de 1970





Si quisiéramos cambiar el formato, podemos usar la función data_default_timezone_set("Zona_horaria")
  • Por ejemplo
<?php
$dia= 27;
$mes = 12;
$year = 2001;
 
$fecha_string="$dia-$mes-$year";
date_default_timezone_set('Europe/Madrid');
$tiempo = strtotime($fecha_string);
echo "<h1>Marca de tiempo de $fecha_string <span style='color:red'>$tiempo</h1>";
El código anterior imprimirá

Strtotime1.png



Icon activity.jpg
Ejemplo de uso de strtotime
<?php
$dia =27;
$mes=11;
$year=2001;
 
$fecha ="$mes/$dia/$year";
$time = strtotime($fecha);
echo "<h2>Valor de $fecha es $time</h2>h2>";
<br/>




strftime()

https://www.php.net/manual/es/function.strftime.php
  • Da formato a una fecha según el idioma establecido
  • Para poder ver el uso de esta función , debemos establecer uno de los idiomas que tengamos instalados en el sistema.
  • Para realizar esta acción debemos usar la función setlocale
setlocale()
https://www.php.net/manual/es/function.setlocale.php

Esta función establece un idioma para la fecha, monedas,... Para poder usar esta función debemos tener instalado en el sistema ese conjunto de caracteres de formato para la localidad deseada

Para ver las localidades instaladas puedes usar el comando
 locale -a
Para instalar nuevas localidades
 sudo dpkg-reconfigure locales
  • Saldrá un menú y seleccionaremos las localidades. Para los ejercicios debes tener instaladso
  1. es_ES.UTF-8 Español
  2. fr_FR.UTF-8 Francés
  3. en_US.UTF-8 Inglés
Para instalar una localidad concreta
 sudo locale-gen "en_US.utf8"

Esta función retorna false o bien la localidad esablecida, si todo ha ido bien

checkdate(mes, dia, year)

  • Esta función recibe tres enteros que representan una fecha y retorna un booleano que idica si la fecha es o no correcta