LENGUAJE PHP: EL LENGUAJE EN GENERAL
¡El servidor te responde
PHP Un lenguaje de script al lado del servidor
- 1 Estructuras de control
- 2 Operadores y expresiones
- 2.1 Operadores
- 2.1.1 Operadores de expresiones numéricas
- 2.1.2 Operadores con asignación en una misma variable
- 2.1.3 Operadores comparación (==,<,>,>=,<=,<>,!=,===,!==)
- 2.1.4 operadores de concatenacón( .) concatena cadena de caracteres.
- 2.1.5 Operadores de asignación (= , =>)
- 2.1.6 Operadores de ejecución (``)
- 2.1.7 Operadores lógicos (and,&&, or, ||, xor !)
Estructuras de control
- Determinan el flujo de ejecución de un programa
- Tenemos tres estructuras de control
- Veremos cómo se implementan en PHP
|
Estructuras de control
- Con este nombre, identificamos la estructura o forma con la que vamos a seguir el flujo de ejecución de un programa, es decir, especificar cuál es la siguiente intrucción que voy a ejecutar.
- Tenemos tres estrucuturas de control
Son de tres tipos
- Secuenciales
- Selección
- Iteracción
- Para construirlas necesitamos operadores que a continuación vamos a estudiar
- A modo de resumen vamos a ver la siguiente tabla
Resumen de las estructurasd e control
Tipo de Estructura de control
|
Sintáxis en php
|
Ejemplo
|
Secuencial
|
{
sentencia_1;
sentencia_2;
....
}
|
$num = rand(-10,20)
echo "Se ha generado el numero $num";
|
Selectiva
|
if(expresion_booleana)
{
sentencia_1;
sentencia_2;
}
sentencia_3
|
$num = rand(-10,20);
if($num<0){
echo "El número tiene que ser mayor que 0, reasignamos el valor 1";
$num=1;
}
echo "El valor del número es $num";
|
Repetitiva
|
while (expresion_booleana){
sentencia_1;
sentencia_2;
}
sentencia_3
|
$num = 0;
$total=0;
while($num<100){
$total= $total+$num;
$num = $num+1;
}
echo "Los primeros 100 números suman $total";
|
Secuencial
- Con esta estrucutra de control, lo que estamos especificando es que se ejecuta una instrucción detras de otra de forma seguida, por lo que el flujo de control es secuancial
Selección if
- Sentencia que evalúa una expresión booleana y ejecuta o no en función de que dicha expresión sea true o false
if (expresion_booleana)
Sentencia 1;
- En caso de haber más de una setencia, obligatoriamente debemos de poner las llaves especificando el bloque de sentencias
if (expresion_booleana ){
Sentencia_1;
Sentencia_2;
}
- Podemos ver su lógica en la imagen siguiente
- Sentencias de control
if (expresion_booleana)
{
bloque_de_sentencias_1;
}
else
{
bloque_de_sentencias_2;
}
- Podemos ver su lógica en la imagen siguiente
- También existe la opción elseif donde aportaremos una condición que se ha de cumplir para que se ejecuten las sentencias que a continuación acompañan.
- Se garantiza que solo se va a ejecutar un bloque de instrucciones.
- Estructura de control
if (expresion_booleana_1)
{
bloque_sentencias_1;
}
elseif (expresion_booleana_2){
bloque_sentencias_2
}
elseif (expresion_booleana_3){
bloque_sentencias_3
}
elseif (expresion_booleana_4){
bloque_sentencias_4
}
else{
bloque_sentencia_5 ;
}
sentencia_6
- Podemos ver su lógica en la imagen siguiente
- Alternativamente puede usarse esta sintaxis que es usada cuando se quiere intercalar condigo html fuera del php como veremos más adelante.
- También se puede usar la sintaxis vista anteriormente, pero parece que esta quede más compacta.
if (condicion):
Sentencia 1;
endif;
- Ahora lo vemos con código html
<?php if (true): ?>
<h1>Esta frase seguro que aparece ahor</h1>
<!--escribirmos código html -->
<?php else: ?>
<h1>Aquí escribiré poco ya que no va a aparecer nada</h1>
<!--escribimos código html -->
<?php endif ?>
Operador Ternario
- El operador ternario es una forma más compacta de expresar una estructura if-else en una única línea, ideal cuando se desea evaluar una condición y devolver un valor en función del resultado.
- Esta expresión retorna un valor según la condición especificada.
(expresión_booleana) ? valor_si_true : valor_si_false;
- El valor que retorna es el resultado de la expresión que corresponda según el valor de la condición. Esta expresión es equivalente a:
if (expresión_booleana)
valor_si_true;
else
valor_si_false;
- Usar el operador ternario ayuda a escribir el código de forma más compacta y clara, especialmente en expresiones sencillas.
Ejemplo
Actividad
Determinar si un número aleatorio es par o impar
|
[▼]Operador ternario |
---|
Programa para par o impar con operador ternario
<?php
$num = rand(1, 100);
echo ($num % 2 == 0) ? "$num es par" : "$num es impar";
?>
|
[▼]Estructura if-else |
---|
Programa para par o impar con estructura if-else
<?php
$num = rand(1, 100);
if ($num % 2 == 0) {
echo "$num es par";
} else {
echo "$num es impar";
}
?>
|
- Este operador ternario se utiliza mucho en programación, y conviene entenderlo y habituarse a su uso para escribir código más conciso y claro.
Selección con `switch`
- El operador switch es un selector múltiple que permite evaluar el valor de una variable o expresión y ejecutar el bloque de código correspondiente al primer caso que coincida.
- En PHP, la sentencia `case` puede albergar valores de cualquier tipo simple (números, cadenas, etc.), no está limitada a enteros como en otros lenguajes.
- Esta estructura es útil cuando tenemos múltiples casos excluyentes y queremos evitar múltiples `if-else`.
Sintaxis
La sintaxis básica de un `switch` en PHP es:
switch ($valor) {
case "valor1":
// acciones
break;
case "valor2":
// acciones
break;
case "valorn":
// acciones
break;
default:
// acciones si no hay coincidencia
}
Notas Importantes
- El `switch` busca la primera coincidencia de `$valor` con los valores de los casos (`case`) y ejecuta todas las instrucciones posteriores hasta encontrar un `break`.
- Si no se coloca un `break`, continuará ejecutando los casos siguientes, incluso si no coinciden.
Ejemplo Básico
|
Ejemplo: Identificar un Nombre
|
|
- Escribe un programa que evalúe si una variable `$nombre` es "María", "Pedro", o cualquier otro nombre.
[▼]Posible Solución |
---|
<?php
$nombre = "Pedro";
switch ($nombre) {
case "María":
echo "Eres una chica";
break;
case "Pedro":
echo "Eres un chico";
break;
default:
echo "No sé qué nombre tienes";
}
?>
|
|
Ejemplo con Rango de Valores
- En algunos casos, queremos evaluar rangos de valores (por ejemplo, edades, calificaciones). En PHP, esto se logra usando expresiones booleanas dentro de los `case` y configurando el `switch` para evaluar `true`.
|
Ejemplo: Nivel de Madurez
|
|
- Generar una edad aleatoria entre 0 y 110 y clasificarla según el nivel de madurez:
- 0–2: Bebé
- 3–10: Niñez
- 11–17: Adolescencia
- 18–26: Juventud
- 27–59: Adultez
- 60–80: Experimentado
- Más de 80: Disfrutando la vida
[▼]Posible Solución |
---|
<?php
$edad = rand(0, 110);
switch (true) {
case ($edad >= 0 && $edad <= 2):
echo "Con $edad años: Eres un bebé";
break;
case ($edad >= 3 && $edad <= 10):
echo "Con $edad años: Estás en la niñez";
break;
case ($edad >= 11 && $edad <= 17):
echo "Con $edad años: Estás en la adolescencia";
break;
case ($edad >= 18 && $edad <= 26):
echo "Con $edad años: Eres joven";
break;
case ($edad >= 27 && $edad <= 59):
echo "Con $edad años: Eres adulto";
break;
case ($edad >= 60 && $edad <= 80):
echo "Con $edad años: Eres experimentado";
break;
default:
echo "Con $edad años: Disfruta la vida";
}
?>
|
|
Casos Curiosos en PHP
En PHP, al comparar rangos o expresiones booleanas dentro de un `case`, se recomienda configurar el `switch` para evaluar `true`. Esto evita errores de interpretación con valores como `0`.
<?php
$nota = 0;
switch ($nota) {
case ($nota >= 0 && $nota <= 3):
echo "Nota deficiente";
break;
case 4:
echo "Nota insuficiente";
break;
case 5:
echo "Nota suficiente";
break;
case ($nota > 6 && $nota < 9):
echo "Nota notable";
break;
case ($nota >= 9):
echo "Nota sobresaliente";
break;
}
?>
- Si `$nota = 0`, el primer caso no se ejecuta porque PHP convierte `0` a booleano `false`, lo que genera errores lógicos.
<?php
$nota = rand(0, 10);
switch (true) {
case ($nota >= 0 && $nota <= 3):
echo "Nota deficiente";
break;
case $nota == 4:
echo "Nota insuficiente";
break;
case $nota == 5:
echo "Nota suficiente";
break;
case $nota == 6:
echo "Nota bien";
break;
case ($nota >= 7 && $nota <= 8):
echo "Nota notable";
break;
case ($nota >= 9):
echo "Nota sobresaliente";
break;
}
?>
Actividad Propuesta
- Generar un número aleatorio para el mes (entre 1 y 12) y mostrar el número de días correspondientes. Si el número no corresponde a un mes válido, informar al usuario.
[▼]Posible Solución |
---|
<?php
$mes = rand(1, 15);
switch ($mes) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
echo "$mes es un mes de 31 días";
break;
case 4: case 6: case 9: case 11:
echo "$mes es un mes de 30 días";
break;
case 2:
echo "$mes es un mes de 28 o 29 días (dependiendo del año)";
break;
default:
echo "$mes no es un mes válido";
}
?>
|
}}
Selección con el operador match
- El operador match aparece en php en la versión 8
- Es una opción depurada y para casos concretos que puede sustituir de forma más eficiente y legigle a la estructura switch-case
- 1.- Siempre retornará un valor
- 2.- Evaluamos una expresión, al igual que con switch-case
- 3.- En cada una de las ramas puedo establecer varias condiciones separadas por comas, intuyendo en ello una or lógica.
- 4.- Igual que en switch-case existe la rama default
- 5.- Como va a ser parte de una asignación, debe de terminar en ;
- 6.- Las comparaciones que hace son estrictas a diferenica del switch-case que hace comparaciones no estrictas
|
- A continuación podemos ver ejemplos
$numero_mes = rand(1,15);
$nombre_mes = match ($numero_mes){
1=>"Enero",
2=>"Febrero",
.....
default => "Mes incorrecto"
};
echo "El mes $numero_mes es $nombre_mes"
- Aquí vemos el uso de varios valores posibles en la comparación
```php
$numero_mes = rand(1,15);
$numero_dias=match($mes){
1,3,5,7,8,10,12 => 31,
4,6,8,11 =>30,
2 => 28
};
echo "El mes $mes tiene $numero_dias días";
Iteración while
- Como en todos los bucles debemos siempre tener encuenta
- inicializar la variable de control
- actualizarla correctamente dentro del bucle
- realizar de forma correcta la evaluación de condición (< o <=), (> o >=), ...
Uso de while
- Mostrar la suma de los primeros 100 números naturales
- Se quiere ver el número de iteración y la suma hasta ese momento (Es decir queremos ver cien líneas)
- Cada iteración que aparezca en numeración ordinal en símbolo 1ª , 2ª, ...
[▼]Posible solución |
---|
<?php
$i = 0;
while ($i < 100) {
$suma+=$i;
$i++;
echo "iteracción {$i}ª Suma $suma<br />";
}
?>
|
|
Uso de while
- Generamos un número aleatorio entre 1 y 15.
- Mostramos un mensaje con el número hasta que el número que salga sea el 13.
- Podría ser que el número nos salga el primero en cuyo caso no habrá ningún mensaje
- Mostramos cuantos números se han generado y la suma de los mismos
|
}}
Iteracción do-while
- Este tipo de bucle donde seguro que al menos se ejecuta un iteracción
- Respecto al anterior nos ahorra una comparación.
Usando do-while
- Modifica el ejercicio anterior usando un do-wile
- En este caso el número 13 también queremos que forme parte de la lista y se incluya tanto en la suma como en la contabilización,
|
Usando do-while
- Programa para rellenar una bonoloto
- Generamos 5 valores aleatorios de 1 a 50 diferentes
- Los motramos por pantalla
[▼]Posiblesolucion |
---|
$n1 = 72;
$n2 = 15;
$n3 = $n1&$n2;
echo "<h1> $n1 or a nivel de bits $n2 es $n3</h1>";
printf ("<h1> %b or %b es %b</h1>", $n1, $n2, $n3);
do{
}while ( )
$n1 = rand(1, 50);
do {
$n2 = rand(1, 50);
} while ($n2 == $n1);
do {
$n3 = rand(1, 50);
} while (($n3 == $n1) OR ($n3 == $n2));
do {
$n4 = rand(1, 50);
} while (($n4 == $n1) OR ($n4 == $n2)OR ($n4 == $n3));
do {
$n5 = rand(1, 50);
} while ($n5 == $n1 || $n5 == $n2 || $n5 == $n3 || $n5 == $n4);
echo "<h1>Los números generados $n1-$n2-$n3-$n4-$n5</h1>";
|
|
Generar tabla ascii
- Programa para generar una tabla ascii con caracteres desde el 0 hasta el 127
- Intentamos generar la tabla html
|
Generar una password
- Programa para generar una passoword
- Generamos una password con caracteres ascii (ver tabla anterior
- La password debe de tener 7 caracteres
- Los caracteres se puede repetir
- Al menos 2 de ellos han de ser no alfanuméricos
[▼]Posiblesolucion |
---|
<?php
//Parte fija
$password = "";
for ($n = 0; $n < 2; $n++) {
$rango = rand(0,2);
$caracter = match ($rango) {
0 => rand(33, ord('0')),
1 => rand(ord('9'), ord('A')),
2 => rand(ord('Z'), 126),
};
$password .= chr($caracter);
}
for ($n = 0; $n < 6; $n++) {
$caracter = rand(34, 126);
$password .= chr($caracter);
}
echo "<h1>$password</h1>";
$password = str_shuffle($password);
echo "<h1>$password</h1>";
//Parte común
?>
|
|
}}
Iteración for
- Es un bucle de tipo contador
for (expresion_inicial; condicion;expresion_actualizar){
sentencias;
}
- Estructura for
- expresion_inicial
-
- Se ejecuta una sola vez al comienzo del bucle. se usa para inicializar variables
- condición
- Es una expresión booleana que se evalúa en cada interacción
- Si da un valor false, ya no se ejecuta ninguna vez
- Si no hay expresión se toma como true
- En este caso para que el bucle no sea infinito deberá llevar algún break (instrucción de terminación de bloque) en algún momento
- Incremento de la expresión inicial
- Marca el paso o cómo se va modificando la variable de control en cada iteración
- Estructura for
- condición
<?php
for ($a=0; ;$a++){
echo "$a*$a=".$a*$a."<br>";
}
?>
- Es como si dentro del bucle establecemos la condición de terminación usando la instrucción de terminación de bloque break
- Observa el siguiente código forzado y compáralo con el anterior (mira que la sección de condición está vacía)
<?php
for ($a=0; ;$a++){
echo "$a*$a=".$a*$a."<br>";
if ($a==10)
break;
}
?>
- Estructura for
- expresion_actualizar
- Esta expresión actualiza el valor de alguna/as variables
- Se ejecuta en cada interactivo
<?php
for ($a=0;$a<10 ;$a++){
echo "$a*$a=".($a*$a)."<br>";
}
?>
Operadores y expresiones
¿Qué es una expresión?
- Son partes de las frases de un lenguaje de programación
Definición
- Es un conjunto de operador/es y operando/s
- que se evalúan
- y dan como resultado un valor
|
|
- 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
- Intervienen con valores numéricos y retorna un número como resultado de su evaluación
|
- Aritméticos (+,-,*,/,%,**)
- Autoincremente/decremento(++ --)
- Asignación compuesta (los aritmétcios segidos de una asignación += -= *= ....)
1.- Operadores aritméticos
- Cuando haya varios en una operación, hay que tener cuidado con la preferencia. Mejor esplicitarla con paréntesis
|
Qué ejecutaría el siguiente código
- Mejor ponerlo así
[▼]Ejecución |
---|
$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>";
- Salida
|
|
- El operador quizá menos utilizado es el módulo(%) y el exponente(**).
(
: El módulo se usa mucho para ver si un número es o no divisible por otro.)
Actividad
- Buscar todos los números divisibles por 3 del 1 al 100
[▼]Posible solución |
---|
$lista = null;
for($n=1; $n<=100; $n++){
if ($n%3==0)
$lista.="$n, ";
}
echo "<h1>$lista</h1>";
- Salida
|
( : 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
Actividad
- Obtenerlo las diferentes potencias de 2 hasta elevarlo a 15
- 21 22 23...215
[▼]Posible solución |
---|
for($n=1; $n<=15; $n++){
echo "2<sup>$n</sup>=".(2**$n)."<br />";
}
- Salida
|
|
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
Title: forma de usar los operadores
- Pre es anteponiendo el operador
- Post es posponiéndolo
|
- 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 />";
}}
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
- 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
- == 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';
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