Capítulo 2. El lenguaje PHP – 2

Capítulo 2. El lenguaje PHP. - 2

7.- Estructuras de control.

7.1.- Estructuras de control selectivas

Estas estructuras de control nos van a permitir seleccionar que sentencias vamos a ejecutar o interpretar.

Tenemos, al igual que en el lenguaje de programación C, dos tipos:

a) if-else

Ejecutará una serie de sentencias en función de si una condición es cierta o no. Su sintaxis puede ser de dos formas, sin incluir el «else»:

if (condición)
sentencia1

o incluyéndolo:

if (condición)
sentencia1
else
sentencia2

En ambos casos si la condición es TRUE (es cierta) entonces se ejecutará la «sentencia1», y si la condición es FALSE en el primer caso se continuará en la siguiente sentencia a «sentencia1» y en el segundo caso (el que tiene el «else») se ejecutará sólo la «sentencia2».

Debemos tener en cuenta una cosa: una sentencia puede ser:
– Simple: Estará formada por una sola instrucción, y terminada en «;»
– Compuesta: Al estar formada por varias instrucciones deberán estar encerradas por los símbolos «{» y «}».

Veamos un ejemplo en el que el caso del «if» tiene una sentencia simple y el «else» tiene una sentencia compuesta.

if (($numero % 2)==0)
echo(«El número es par»);
else {
$texto=»El número es impar»;
echo(«$texto»);
}

Observaciones al ejemplo:

– Es aconsejable usar los paréntesis que se consideren oportunos a la hora de poner una condición, pues a veces el no incluir paréntesis nos ejecutará algo distinto a lo esperado (debido a las precedencias).
– Fíjese que para realizar una comparación se usan dos signos igual (==). Un fallo común es usar sólo uno, que se usa para la asignación, en cuyo caso se realizará la asignación y si el valor asignado es distinto de creo se considerará la condición como TRUE y si el valor de la asignación es cero se considerará la condición como FALSE.
– En el ejemplo podría haberse el «else» en una sola línea, pero se ha puesto en dos para que se vea el uso de las llaves para indicar el inicio y el final de una sentencia compuesta.

Como dentro de un if-else podemos tener cualquier tipo de sentencia, podremos tener otros if-else dentro, que a su vez podrán tener otros if-else, etc.

if ($numero == 1)
echo(«El número es el uno»);
else if ($numero == 2)
echo(«El número es el dos»);
else if ($numero == 3)
echo(«El número es el tres»);
else if ($numero == 4)
echo(«El número es el cuatro»);
else echo(«El número es mayor que cuatro»);

b) switch

Una forma más correcta e hacer lo visto en el ejemplo anterior sería usando la estructura «switch». Ésta nos permite elegir entre varios valores, y por último hacer una especie de «else», es decir, una alternativa en caso de no cumplirse ninguna de las condiciones anteriores.

Su sintaxis es la siguiente:

switch (expresión)
{
case valor_1:
sentencia 1
break;
case valor_2:
sentencia 2
break;

case valor_n:
sentencia n
break;
default:
sentencia n+1
}

En este caso no tenemos una condición, sino una expresión, y detrás de cada «case» tendremos un valor posible de dicha expresión, entonces se ejecutarán las sentencias para las que se cumpla que la expresión tenga el valor indicado tras su «case» correspondiente.

Veamos un ejemplo para aclarar conceptos:

switch ($dia)
{
case 1:
echo(«El día es LUNES»);
break;
case 2:
echo(«El día es MARTES»);
break;
// Aquí seguirán los demás días de la semana.
case 7:
echo(«El día es DOMINGO»);
break;
default:
echo(«El número no corresponde a ningún día de la semana»);
}

En cada «case» se compara el valor de la variable «$dia» con el valor que hay detrás de dicho «case». En caso de no ser igual se salta al siguiente «case», y si el valor es igual entonces se ejecutan las sentencias que hay detrás del «case», pero ojo, se ejecutarían TODAS las sentencias hasta el final del «switch» (aunque estén incluidas dentro de otros «case»). Para evitar esto se debe poner la sentencia «break;» detrás de la última sentencia de cada «case» y esto hace que la ejecución salte a la siguiente instrucción que haya detrás del «switch».

Ejercicio 2.3: Escribir el código PHP necesario para que según el valor de una variable muestre el nombre del mes correspondiente a dicho valor numérico. En caso de que el valor no esté entre 1 y 12 se deberá mostrar un mensaje de error.

7.2.- Estructuras de control repetitivas.

Con estas estructuras podremos repetir un conjunto de sentencias el número de veces que sea necesario para nuestro propósito. También se les llama «bucles» en general.

a) while

La sintaxis es la siguiente:

while (condición)
sentencia;

y como en otros casos, si la sentencia es compuesta deberán ponerse las sentencias ue forman parte de ella entre llaves.

El significado es el siguiente: la sentencia se ejecutará mientras el valor de la condición ser TRUE, y en caso contrario se seguirá con la siguiente sentencia al «while». Como es de suponer, dentro de la sentencia (o grupo de sentencias) del while se deberá modificar algún valor que afecte a la «condición», pues sino nunca saldríamos de la estructura de control o bucle while.

Veamos un ejemplo:

$num=2;
while ($num<7) {
echo(«El número es: $num»);
$num=$num+1;
}
echo(«Fin del bucle while»);

que generaría el siguiente código:

El número es: 2 El número es: 3 El número es: 4 El número es: 5 El número es: 6 Fin del bucle while

Como puede verse el código que se genera es siempre seguido, a no ser que se lo indiquemos con el carácter de nueva línea: \n

$num=2;
while ($num<7) {
echo(«El número es: $num\n»);
$num=$num+1;
}
echo(«Fin del bucle while»);

que generaría el siguiente código:

El número es: 2
El número es: 3
El número es: 4
El número es: 5
El número es: 6
Fin del bucle while

Aunque este texto en el navegador seguiría apareciendo todo seguido, pues ya sabemos que en código HTML si queremos que algo vaya a la línea siguiente deberemos poner o bien «<P>» o bien «<BR>».

Ejercicio 2.4: Crear el código PHP necesario para que muestre los números pares entre el 10 y el 50 (incluidos). Usar la sentencia «while».

Ejercicio 2.5: Crear el código PHP necesario para que muestre los números múltiplos de 3 entre los números almacenados en dos variables: $inicio y $final. Usar la sentencia «while».

Ejercicio 2.6: Crear el código PHP necesario para que muestre los números entre los números almacenados en dos variables: $inicio y $final y nos diga de cada uno si es múltiplo de 2, de 3 o las dos cosas a la vez. Usar la sentencia «while».

b) for

La sintaxis es la siguiente:

for (inicialización; condición; incremento)
sentencia;

El funcionamiento es muy parecido a la sentencia «while», así que veremos un ejemplo que hará lo mismo que el ejemplo anterior con la sentencia «while» para dejar claro su funcionamiento.

for ($num=2; $num<7; $num++)
echo(«El número es: $num»);
echo(«Fin del bucle for»);

que generaría el siguiente código:

El número es: 2 El número es: 3 El número es: 4 El número es: 5 El número es: 6 Fin del bucle for

Como puede observarse hacen exactamente lo mismo, pero mientras «while» se usa para cuando no se sabe con certeza cuantas veces se ha de ejecutar un sentencia, «for» se suele usar para cuando se sabe cuantas veces se tiene que ejecutar una sentencia. En esos últimos casos es más difícil usar el «for». (por ejemplo, cuando accedamos a una base de datos en la que no sabemos cuantos datos tendremos)

Una observación al ejemplo anterior es el modo de incrementar la variable «$num». Podemos ver las dos formas de hacerlo:

$num=$num+1 hacen lo mismo $num++

Ejercicio 2.7: Crear el código PHP necesario para que muestre los números pares entre el 10 y el 50 (incluidos). Usar la sentencia «for».

Ejercicio 2.8: Crear el código PHP necesario para que muestre los números múltiplos de 3 entre los números almacenados en dos variables: $inicio y $final. Usar la sentencia «for».

Ejercicio 2.9: Crear el código PHP necesario para que muestre los números entre los números almacenados en dos variables: $inicio y $final y nos diga de cada uno si es múltiplo de 2, de 3 o las dos cosas a la vez. Usar la sentencia «for».

c) do … while

La sintaxis es la siguiente:

do sentencia
while (condición);

Este bucle funciona de forma idéntica al bucle «while» con la única diferencia de que la condición se comprueba al final, por lo que la «sentencia» siempre se ejecutará al menos una vez. En los bucles «while» y «for» podría darse el caso que nunca se ejecute la sentencia que tiene dentro ninguna vez.

Veamos un ejemplo con «while»:

$num=10;
while ($num<7) {
echo(«El número es: $num»);
$num=$num+1;
}
echo(«Fin del bucle while»);

Que nos generará la siguiente salida:

Fin del bucle while

Y otro con «do…while»

$num=10;
do {
echo(«El número es: $num»);
$num=$num+1;
} while ($num<7);
echo(«Fin del bucle do…while»);

Que nos generará la siguiente salida:

El número es: 10Fin del bucle do…while

Como puede verse, con el «while» no se ejecuta ninguna vez el bucle, mientrasque con el «do…while» se ejecuta una vez.

Ejercicio 2.10: Crear el código PHP necesario para que muestre los números pares entre el 10 y el 50 (incluidos). Usar la sentencia «do…while».

Ejercicio 2.11: Crear el código PHP necesario para que muestre los números múltiplos de 3 entre los números almacenados en dos variables: $inicio y $final. Usar la sentencia «do…while».

Ejercicio 2.12: Crear el código PHP necesario para que muestre los números entre los números almacenados en dos variables: $inicio y $final y nos diga de cada uno si es múltiplo de 2, de 3 o las dos cosas a la vez. Usar la sentencia «do…while».

d) foreach

Esta estructura de control es muy similar a «for», pero sólo se utiliza sobre los arrays y nos facilita en recorrer todos los elementos de un array sin necesidad de conocer el índice que se usa en dicho array, e incluso nos informa del nombre del índice de cada elemento.

Veamos un ejemplo:

<?PHP
$diasSemana = array(‘lunes’=>1, ‘martes’=>2, ‘miércoles’=>3,
‘jueves’=>4, ‘viernes’=>5, ‘sábado’=>6, ‘domingo’=>7);
foreach ($diasSemana as $NumeroDia)
echo(«Número del día: $NumeroDia<BR>\n»);
foreach ($diasSemana as $clave => $NumeroDia)
echo(«Nombre del día: $clave Número del día: $NumeroDia<BR>\n»);
?>

que nos genera el siguiente código HTML (se ha usado «\n» para que el código HTML generado sea más legible):

Número del día: 1<BR>
Número del día: 2<BR>
Número del día: 3<BR>
Número del día: 4<BR>
Número del día: 5<BR>
Número del día: 6<BR>
Número del día: 7<BR>
Nombre del día: lunes Número del día: 1<BR>
Nombre del día: martes Número del día: 2<BR>
Nombre del día: miércoles Número del día: 3<BR>
Nombre del día: jueves Número del día: 4<BR>
Nombre del día: viernes Número del día: 5<BR>
Nombre del día: sábado Número del día: 6<BR>
Nombre del día: domingo Número del día: 7<BR>

y en el explorador nos aparece (Se ha usado «<BR>» para que cada día salga en una línea diferente):

Número del día: 1
Número del día: 2
Número del día: 3
Número del día: 4
Número del día: 5
Número del día: 6
Número del día: 7
Nombre del día: lunes Número del día: 1
Nombre del día: martes Número del día: 2
Nombre del día: miércoles Número del día: 3
Nombre del día: jueves Número del día: 4
Nombre del día: viernes Número del día: 5
Nombre del día: sábado Número del día: 6
Nombre del día: domingo Número del día: 7

Y también podríamos colocar los índices numéricos y en el valor de cada posición el día de la semana en texto:

<?PHP
$diasSemana = array(1=>’lunes’, 2=>’martes’, 3=>’miércoles’,
4=>’jueves’, 5=>’viernes’, 6=>’sábado’, 7=>’domingo’);
foreach ($diasSemana as $NumeroDia)
echo(«Nombre del día: $NumeroDia<BR>\n»);
foreach ($diasSemana as $clave => $NumeroDia)
echo(«Número del día: $clave Nombre del día: $NumeroDia<BR>\n»);
?>

que nos generará el siguiente código HTML:

Nombre del día: lunes<BR>
Nombre del día: martes<BR>
Nombre del día: miércoles<BR>
Nombre del día: jueves<BR>
Nombre del día: viernes<BR>
Nombre del día: sábado<BR>
Nombre del día: domingo<BR>
Número del día: 1 Nombre del día: lunes<BR>
Número del día: 2 Nombre del día: martes<BR>
Número del día: 3 Nombre del día: miércoles<BR>
Número del día: 4 Nombre del día: jueves<BR>
Número del día: 5 Nombre del día: viernes<BR>
Número del día: 6 Nombre del día: sábado<BR>
Número del día: 7 Nombre del día: domingo<BR>

y en el explorador nos aparece:

Nombre del día: lunes
Nombre del día: martes
Nombre del día: miércoles
Nombre del día: jueves
Nombre del día: viernes
Nombre del día: sábado
Nombre del día: domingo
Número del día: 1 Nombre del día: lunes
Número del día: 2 Nombre del día: martes
Número del día: 3 Nombre del día: miércoles
Número del día: 4 Nombre del día: jueves
Número del día: 5 Nombre del día: viernes
Número del día: 6 Nombre del día: sábado
Número del día: 7 Nombre del día: domingo

8.- Funciones.

8.1.- Funciones definidas por el usuario.

Las funciones, como su propio nombre indica, realizan una «función» que en la mayoría de los casos se debe realizar en varios lugares de una misma página Web, por lo que se escriben una vez y luego se utilizan las veces que sean necesario.

Su sintaxis es la siguiente:

function nombre_de_la_función (parámetros_opcionales)
{
sentencias_de_la_función;
return valor_de_retorno_opcional;
}

Como siempre, vamos a ver un ejemplo. Definiremos una función que generará un mensaje.

function mensaje()
{
echo(«Hola.\n»);
}
// Código PHP dentro de la página Web.
echo(«Antes de la función.\n»);
mensaje();
echo(«Después de la función.\n»);

que nos generará el siguiente código HTML:

Antes de la función.
Hola.
Después de la función.

Ahora vamos a ver una función que recibe un argumento numérico y devuelve el doble de dicho valor:

function doble($num)
{
$num=2*$num;
return $num;
}
// Código PHP dentro de la página Web.
$valor=doble(3);
echo(«$valor\n»);

que nos generará el siguiente código HTML:

6

Y para terminar veremos el ejemplo de una función que toma dos argumentos y devuelve el resultado de su suma:

function suma($num1,$num2)
{
$resultado=$num1+$num2;
return $resultado;
}
// Código PHP dentro de la página Web.
$valor=suma(5,6);
echo(«$valor\n»);

que nos generará el siguiente código HTML:

11

También podemos enviar argumentos a la función por defecto, es decir, en caso de no enviarle dicho argumento la función tomará el valor por defecto. Deberemos tener en cuenta que los argumentos por defecto siempre deben ir al final.

Veremos un ejemplo en el que la función recibe dos argumentos y devuelve el resultado de multiplicarlos, pero en caso de sólo recibir uno devolverá el doble del primer argumento por que el segundo argumento tiene valor por defecto «2».

function multiplica($num1,$num2=2)
{
$resultado=$num1*$num2;
return $resultado;
}
// Código PHP dentro de la página Web.
$valor= multiplica (5,6);
echo(«Primera multiplicación: $valor\n»);
$valor= multiplica (5);
echo(«Segunda multiplicación: $valor\n»);

que nos generará el siguiente código HTML:

Primera multiplicación: 30
Segunda multiplicación: 10

Ejercicio 2.13: Crear una función que reciba dos números y genere la lista de números pares que hay entre ellos. Llamarla para comprobar que funciona. Tener en cuenta que los dos números que reciba como argumentos no tienen que ser: el primero el menor y el segundo el mayor.

Ejercicio 2.14: Crear una función que reciba dos números y genere la lista de números pares que hay entre ellos. Llamarla para comprobar que funciona. Tener en cuenta que los dos números que reciba como argumentos no tienen que ser: el primero el menor y el segundo el mayor. Y tener en cuenta también que si sólo recibe un argumento el otro valor será el cero (es decir, mostrará los valores pares entre el cero y el otro valor recibido).

Ejercicio 2.15: Crear una función que reciba un argumento numérico y nos muestre la tabla de multiplicar de ese valor (desde 0 hasta 10). En caso de no recibir dicho argumento se mostrarán todas las tablas de multiplicar para los números desde el 1 hasta el 10.

8.2.- Funciones de biblioteca.

Como es natural, en PHP existen una serie de bibliotecas con funciones ya efinidas y que el usuario puede usar.

Estas funciones se encuentran clasificadas, y podemos encontrar una documentación más detallada en la página de PHP:

http://www.php.net/manual/es/funcref.php

Entre estos grupos de funciones podemos nombrar algunas como:

– Cadenas de texto.
echo(), print(), printf(), strlen(), strcmp(), rtrim(), ltrim(), trim(), strtolower(), strtoupper(), etc.
– Calendario.
cal_days_in_month(), JDDayOfWeek(), JDMonthName(), etc.
– Fecha y hora.
date(), time(), localtime(), strftime(), etc.
– Matemáticas.
abs(), sin(), cos(), exp(), min(), max(), pi(), rand(), rount(), sqrt(), etc.
– MySQL (acceso a bases de datos).
mysql_connect(), mysql_close(), mysql_error(), mysql_fetch_row(), mysql_num_rows(), etc.
– Sistema de archivos.
copy(), delete(), fopen(), fclose(), fread(), fwrite(), feof(), etc.
– Etc.

Publicaciones Similares