Introducción a PHP

Implantación de Aplicaciones Web

José Juan Sánchez Hernández

Curso 2023/2024



1 Introducción a PHP

1.1 Entorno de desarrollo con Docker

1.1.1 Preparación del entorno de desarrollo

Para el desarrollo de las prácticas vamos a hacer uso de contenedores Docker y Docker Compose.

Para poder ejecutar contenedores Docker es necesario tener instalado Docker Community Edition (CE) y Docker Compose en nuestro equipo.

En la web oficial encontrará la información necesaria para realizar la instalación de Docker CE sobre Windows, macOS, Ubuntu, Debian, Fedora y CentOS.

1.1.2 Cómo crear un contenedor Docker con persistencia de datos

Si queremos que los datos del contenedor sean persistentes tenemos que crear un volumen donde vamos a indicar el directorio de nuestra máquina local que queremos vincular con el directorio /var/www/html del contenedor Docker, que es el directorio que utiliza Apache HTTP Server por defecto para servir una página web.

El comando que podríamos usar para lanzar nuestro contenedor Docker es el siguiente:

docker run -d --rm --name my-apache-php-app -p 80:80 -v "$PWD":/var/www/html php:7.4-apache

1.1.3 Crear un entorno de desarrollo LAMP con Docker Compose

Si queremos crear un entorno de desarrollo con la pila LAMP completa podemos hacer uso del repositorio que se indica a continuación, que contiene la configuración necesaria para crear el entorno con Docker Compose.

El archivo docker-compose.yml del repositorio contiene la definición de tres servicios:

Para iniciar los servicios en su entorno de desarrollo, en primer lugar tendrá que clonar el repositorio en su equipo.

git clone https://github.com/josejuansanchez/lamp-docker

Una vez que haya clonado el repositorio en su equipo sólo tiene que acceder al directorio del repositorio.

cd lamp-docker

Para iniciar los servicios que se han definido en el archivo docker-compose.yml puede ejecutar el siguiente comando.

docker-compose up -d

Para detener los servicios podemos hacerlo con el comando:

docker-compose down

Si quisiéramos eliminar el volumen que hemos definido para MySQL podemos utilizar el parámetro -v. De modo que el comando que tendríamos que ejecutar sería el siguiente:

docker-compose down -v

1.2 Conceptos básicos

1.3 ¿Qué es PHP?

PHP es un lenguaje de programación de uso general, especialmente adecuado para el desarrollo web.

El código PHP puede ser interpretado y ejecutado desde la interfaz de línea de comandos (CLI) o desde un servidor web que tenga implementado un intérprete PHP.

1.4 ¿Cómo funciona PHP?

1.5 ¿Qué sitios web utilizan PHP?

En la actualidad, PHP está siendo utilizado en gran cantidad de sitios web. Entre los sitios web más destacados podemos encontrar:

Sitios como Facebook o Wikipedia, hacen uso del lenguaje de programación Hack que es una extensión de PHP y se ejecuta en la máquina virtual HHVM (HipHop Virtual Machine).

1.6 Frameworks PHP

Un framework es una estructura conceptual y tecnológica de asistencia definida, normalmente, con artefactos o módulos concretos de software, que puede servir de base para la organización y desarrollo de software. (Fuente: Wikipedia)

A la hora de desarrollar software es muy común hacer uso de frameworks ya que nos ayudarán a reducir a cantidad de código que tenemos que escribir y nos proporcionarán una gran cantidad de bibliotecas para realizar funciones de uso común.

Algunos de los frameworks PHP más utilizados actualmente son:

1.7 Sintaxis básica

1.7.1 Etiquetas de apertura y cierre de PHP

El código PHP se encierra entre las etiquetas de apertura y cierre: <?php y ?>. Todo el código que se encuentre estas dos etiquetas será interpretado como código PHP.

Ejemplo:

<?php

echo "¡Hola mundo!";

?>

Es posible omitir la etiqueta de cierre ?> cuando el contenido del archivo sólo sea código PHP.

Ejemplo:

<?php

echo "¡Hola mundo!";

1.7.2 Carácter separador de instrucciones

Todas las instrucciones en PHP terminan con el carácter punto y coma (;).

Ejemplo:

<?php
    echo "¡Hola ";
    echo "mundo!";
?>

El único caso donde se puede omitir el carácter punto y coma (;) en la última instrucción de un bloque PHP, ya que la etiqueta de cierre de un bloque PHP (?>) implica un punto y coma.

Ejemplo:

<?php
    echo "¡Hola ";
    echo "mundo!"
?>

1.7.3 Comentarios

Podemos escribir comentarios de una sóla línea con: // y #, y comentarios multilínea con /* ... */.

Ejemplo:

<?php
    // Esto es un comentario de una línea
    echo "Frase 1";

    # Esto es otro comentario de una línea
    echo "Frase 2";

    /* Este comentario
    es un comentario de múltiples líneas */
    echo "Frase 3";
?>

1.7.4 Código PHP embebido en documentos HTML

El uso de estas etiquetas de apertura y cierre, nos permite embeber código PHP en documentos HTML. De modo que sólo el código que aparezca entre las etiquetas <?php y ?> será interpretado por el intérprete de PHP y el resto de etiquetas serán ignoradas.

Ejemplo de código PHP embebido en un documento HTML:

<!DOCTYPE html>
<html>
<head>
    <title>Ejemplo</title>
</head>
<body>
    <p>Contenido escrito en HTML</p>
    <?php echo "Contenido escrito desde PHP"; ?>
</body>
</html>

1.8 Tipos de datos

Documentación oficial de PHP.

1.9 Variables

Las variables en PHP se representan con el símbolo del dólar ($) seguido por el nombre de la variable. El nombre de la variable es sensible a mayúsculas y minúsculas.

Ejemplo:

<?php
    $nombre = "Pepe";
    $edad = 30;
?>

Documentación oficial de PHP.

1.10 Ámbito de las variables

Documentación oficial de PHP.

1.11 Constantes

Las constantes no pueden modificar su valor durante la ejecución del script. El nombre de la constante no tiene que ir precedido por el símbolo del dólar y es sensible a mayúsculas y minúsculas. Por convención, las constantes siempre se declaran en mayúsculas.

Ejemplo:

<?php
    // Ejemplo de una constante numérica de tipo real
    define("PI", 3.141592);

    // Ejemplo de una constante de tipo string
    define("CONSTANTE", "Hola mundo");
?>

Documentación oficial de PHP.

1.12 echo

echo es una construcción del lenguaje (no es una función) que nos permite mostrar cadenas de texto y el contenido de las variables.

Ejemplo:

<?php

echo "Esto es una cadena de texto.";

// Con echo también podemos mostrar el contenido de una variable
$numero = 10;

echo "El contenido de la variable es: $numero";

?>

Documentación oficial de echo.

1.13 var_dump

var_dump es una función nos permite mostrar el contenido de una variable. Esta función muestra el tipo de dato y el valor de la variable.

Ejemplo:

<?php

$nombre = "Pepe";
$edad = 30;
$nota = 7.5;

var_dump($nombre);
// string(4) "Pepe"

var_dump($edad);
// int(30)

var_dump($nota);
// float(7.5)

?>

Documentación oficial de la función var_dump.

print_r es una función que nos permite mostrar el contenido de una variable de una forma legible.

Ejemplo:

<?php

$lista = array("Pepe", "María", "Juan");

print_r($lista);

//Array
//(
//    [0] => Pepe
//    [1] => María
//    [2] => Juan
//)

?>

Documentación oficial de la función print_r.

1.15 Ejercicios de introducción

1. Escribe un script PHP que muestre información sobre la configuración de PHP que hay en el servidor.

Notas:

2. Revise la documentación oficial de PHP para ver qué información podemos obtener de la variable superglobal $_SERVER. Escribe un script haciendo uso de la variable superglobal $_SERVER que muestre lo siguiente:

Notas:

3. Revise la documentación oficial para conocer todas las variables superglobals que existen. Con ayuda de la función print_r muestra el contenido de cada una de las variables superglobals.

Notas:

1.16 Estructuras de control (if, else, switch)

1.16.1 if

La estructura de control if permite la ejecución condicional de fragmentos de código PHP.

Sintaxis:

<?php

if (condicion_es_cierta) {
    bloque_de_sentencias
}

?>

Ejemplo:

El siguiente ejemplo mostraría a es mayor que b si la variable $a es mayor que $b:

<?php

$a = 10;
$b = 5;

if ($a > $b) {
    echo "a es mayor que b";
}

?>

1.16.2 if - else

Sintaxis:

<?php

if (condicion_es_cierta) {
    bloque_de_sentencias_1
} else {
    bloque_de_sentencias_2
}

?>

Ejemplo:

El siguiente ejemplo puede mostrar a es mayor que b si la variable $a es mayor que $b o a NO es mayor que b en caso contrario.

<?php

$a = 1;
$b = 5;

if ($a > $b) {
    echo "a es mayor que b";
} else {
    echo "a NO es mayor que b";
}

?>

1.16.3 elseif / else if

Sintaxis elseif:

<?php

if (condición_1) {
    bloque_de_sentencias_1
} elseif (condición_2) {
    bloque_de_sentencias_2
} else {
    bloque_de_sentencias_3
}

?>

Sintaxis else if:

<?php

if (condición_1) {
    bloque_de_sentencias_1
} else if (condición_2) {
    bloque_de_sentencias_2
} else {
    bloque_de_sentencias_3
}

?>

Ejemplo:

<?php

$a = 1;
$b = 1;

if ($a > $b) {
    echo "a es mayor que b";
} elseif ($a == $b) {
    echo "a es igual que b";
} else {
    echo "a es menor que b";
}

?>

1.16.4 switch

Sintaxis:

<?php

switch ($variable) {
    case valor1:
        bloque_de_sentencias_1
        break;

    case valor2:
        bloque_de_sentencias_2
        break;

    default:
        bloque_de_sentencias_3
}

?>

Esta estructura de control es equivalente a:

<?php

if ($variable == valor1) {
    bloque_de_sentencias_1
} elseif ($variable == valor2) {
    bloque_de_sentencias_2
} else {
    bloque_de_sentencias_3
}

?>

Ejemplo:

<?php

$numero = 2;

switch ($numero) {
    case 1:
        echo "La variable es igual a 1";
        break;

    case 2:
        echo "La variable es igual a 2";
        break;

    default:
        echo "La variable es un número distinto a 1 y 2";
}

?>

1.16.5 Ejercicios

1. Escribe un script que simule el comportamiento de lanzar una moneda al aire y muestre una imagen con la cara o la cruz de la moneda.

Notas:

2. Escribe un script PHP que genere un número aleatorio entre 1 y 10, simulando una nota numérica y muestre un mensaje indicando la calificación obtenida teniendo en cuenta los siguientes rangos:

Notas:

3. Escribe un script PHP que genere un número aleatorio entre 1 y 7, y muestre un mensaje indicando a qué día de la semana corresponde. Por ejemplo, 1 sería lunes, 2 martes, etc.

Notas:

4. Escribe un script PHP que realice la simulación de lanzar un dado y muestre una imagen con un valor aleatorio enre 1 y 6. Resuelva el ejercicio utilizando la estructura de control if - else.

Notas:

Imágenes: 1, 2, 3, 4, 5 y 6.

5. Escribe un script PHP que realice la simulación de lanzar un dado y muestre una imagen con un valor aleatorio entre 1 y 6. Resuelva el ejercicio utilizando la estructura de control switch.

Notas:

Imágenes: 1, 2, 3, 4, 5 y 6.

6. Escribe un script PHP que realice la simulación de lanzar un dado y muestre una imagen con un valor aleatorio enre 1 y 6. Resuelva el ejercicio sin utilizar las estructuras de control if - else y switch.

7. Escribe un script PHP que realice la simulación de lanzar dos dados y muestre una imagen con los valores obtenidos en cada uno de los dados.

1.17 Bucles (for, while, do-while)

1.17.1 for

Sintaxis:

for (expr1; expr2; expr3) {
    sentencias;
}

Ejemplo:

El siguiente ejemplo muestra los números del 1 al 10.

<?php

for ($i = 1; $i <= 10; $i++) {
    echo $i;
    echo "<br>";
}

?>

Ejemplo:

El siguiente ejemplo muestra los números del 10 al 1.

<?php

for ($i = 10; $i >= 1; $i--) {
    echo $i;
    echo "<br>";
}

?>

1.17.2 while

Sintaxis:

while (condicion_es_verdadera) {
    sentencias;
}

Ejemplo:

El siguiente ejemplo muestra los números del 1 al 10.

<?php

$i = 1;
while ($i <= 10) {
    echo $i;
    echo "<br>";
    $i++;
}

?>

Ejemplo:

El siguiente ejemplo muestra los números del 10 al 1.

<?php

$i = 10;
while ($i >= 1) {
    echo $i;
    echo "<br>";
    $i--;
}

?>

1.17.3 do - while

do {
    sentencias;
} while (condicion_es_verdadera)

Ejemplo:

El siguiente ejemplo muestra los números del 1 al 10.

<?php

$i = 1;
do {
    echo $i;
    echo "<br>";
    $i++;
} while ($i <= 10);

?>

Ejemplo:

El siguiente ejemplo muestra los números del 10 al 1.

<?php

$i = 10;
do {
    echo $i;
    echo "<br>";
    $i--;
} while ($i >= 1);

?>

1.17.4 Ejercicios bucle for

1. Escribe un script PHP que muestre los números del 1 al 10 en una tabla de una fila y 10 columnas. Utiliza un bucle for

Notas:

2. Escribe un script PHP que muestre los números del 1 al 10 en una tabla de una columna y 10 filas. Utiliza un bucle for.

3. Escribe un script PHP que muestre en una tabla los números pares que existen entre 1 y 100. Utiliza un bucle for.

4. Escribe un script PHP que muestre la tabla de multiplicar de un número aleatorio. Utiliza un bucle for

5. Escribe un script PHP que muestre las tablas de multiplicar del 1 al 10. Utiliza un bucle for

1.17.5 Ejercicios bucle while

1. Escribe un script PHP que muestre los números del 1 al 10 en una tabla de una fila y 10 columnas. Utiliza un bucle while

Notas:

1.17.6 Ejercicios bucle do - while

1. Escribe un script PHP que muestre los números del 1 al 10 en una tabla de una fila y 10 columnas. Utiliza un bucle while

Notas:

1.18 Arrays y bucles (for, while, do-while y foreach)

Un array es una estructura de datos que nos permite almacenar varios valores en una única variable.

1.18.1 Arrays con índices

Para crear un array es suficiente con hacer:

$productos = array();

Existen dos formas de inicializar los valores de un array indexado:

$productos = array("Disco SSD", "Memoria RAM", "Monitor");

o también asignando los valores posición a posición:

$productos[0] = "Disco SSD";
$productos[1] = "Memoria RAM";
$productos[2] = "Monitor";

Tenga en cuenta que los arrays siempre empiezan por la posición 0.

1.18.2 Consultar su contenido con print_r

print_r($productos);

1.18.3 Cómo conocer el tamaño de un array con count

$productos = array("Disco SSD", "Memoria RAM", "Monitor");
echo count($productos);

1.18.4 Cómo recorrer un array indexado con for

$productos = array("Disco SSD", "Memoria RAM", "Monitor");
$numero_de_elementos = count($productos);

for ($i = 0; $i < $numero_de_elementos; $i++ ) {
    echo $productos[$i];
    echo "<br>";
}

1.18.5 Arrays asociativos

Los arrays asociativos nos permiten usar claves en lugar de índices, para acceder a los valores del array.

Existen dos formas de inicializar los valores de un array asociativo:

$edades = array("Juan" => "25", "María" => "28", "Paco" => "27");

o también asignando los valores a cada clave:

$edades["Juan"] = "35";
$edades["María"] = "35";
$edades["Paco"] = "35";

1.18.6 Cómo recorrer un array asociativo con foreach

$edades = array("Juan" => "25", "María" => "28", "Paco" => "27");

foreach ($edades as $clave => $valor) {
    echo "Clave: " . $clave . " - Valor: " . $valor;
    echo "<br>";
}

1.18.7 Ejercicios

1. Escribe un script PHP que realice las siguientes acciones:

2. Escribe un script PHP que realice las siguientes acciones:

3. Escribe un script PHP que realice las siguientes acciones:

4. Escribe un script PHP que realice las siguientes acciones:

Escribe un script PHP que sobre un array de temperaturas realice las siguientes operaciones:

El array de temperaturas lo vamos a generar con números aleatorios. El array será de 10 elementos y los valores aletorios generados estarán entre 1 y 30.

5. Resuelva el ejercicio utilizando bucles for.

Notas:

6. Resuelva el ejercicio utilizando bucles while.

Notas:

7. Resuelva el ejercicio utilizando bucles do-while.

Notas:

8. Escribe un script PHP que sobre un array de temperaturas realice las siguientes operaciones:

El array de temperaturas lo vamos a generar con números aleatorios. El número de elementos del array será especificado mediante un formulario y los valores aletorios generados estarán entre 1 y 30.

Notas:

9. Escribe un script PHP que permita ordenar el siguiente array asociativo:

array("Antonio"=>"31", "María"=>"28", "Juan"=>"29", "Pepe"=>"27")

Notas:

10. Escribe un script PHP que muestre el siguiente array asociativo ordenado por la clave. El resultado deberá seguir el siguiente patrón:

La capital de ITALIA es ROMA

Tenga en cuenta que tendrá que utilizar una función para convertir las claves y los valores del array en mayúscula.

array("Italy"=>"Rome", "Luxembourg"=>"Luxembourg", "Belgium"=> "Brussels", "Denmark"=>"Copenhagen", "Finland"=>"Helsinki", "France" => "Paris", "Slovakia"=>"Bratislava", "Slovenia"=>"Ljubljana", "Germany" => "Berlin", "Greece" => "Athens", "Ireland"=>"Dublin", "Netherlands"=>"Amsterdam", "Portugal"=>"Lisbon", "Spain"=>"Madrid", "Sweden"=>"Stockholm", "United Kingdom"=>"London", "Cyprus"=>"Nicosia", "Lithuania"=>"Vilnius", "Czech Republic"=>"Prague", "Estonia"=>"Tallin", "Hungary"=>"Budapest", "Latvia"=>"Riga", "Malta"=>"Valetta", "Austria" => "Vienna", "Poland"=>"Warsaw");

Notas:

11. Escribe un script PHP que convierta el array del ejercicio anterior en un objeto JSON.

Notas:

1.19 Ejercicios - Funciones

1. Escribe una función que reciba un número como parámetro de entrada y que imprima su tabla de multiplicar.

Notas:

2. Escribe una función que reciba dos parámetros de entrada (inicio y fin) y que imprima las tablas de multiplicar entre esos dos números. Utilice la función del ejercicio anterior.

3. Escribe una función llamada inicializar_array que reciba tres parámetros llamados numero_de_elementos, min y max, y que devuelva un array de números enteros comprendidos entre los valores min y max. El número de elementos que contiene el array será el especificado en el parámetro de entrada numero_de_elementos

Notas:

4. Escribe una función llamada calcular_media que reciba un array como parámetro de entrada y que devuelva la media de todos los valores que contiene.

5. Escribe una función llamada calcular_maximo que reciba un array como parámetro de entrada y que devuelva cuál es el máximo valor del array.

6. Escribe una función llamada calcular_minimo que reciba un array como parámetro de entrada y que devuelva cuál es el mínimo valor del array.

7. Escribe una función llamada imprimir_array que reciba un array como parámetro de entrada y muestre su contenido en una tabla con dos columnas. La primera columna mostrará la posición del array y la segunda el valor que hay en esa posición.

8. Crea un archivo llamado funciones.php que contenga todas las funciones creadas en los ejercicios anteriores. Escriba un script PHP que incluya el archivo funciones.php y haga uso de cada una de ellas.

Notas:

1.20 Ejercicios - Formularios

1. Escribe un script que muestre un formulario con un campo de texto y que permita enviarlo usando el método GET. El mismo script será capaz de recibir el dato enviado por el formulario y lo mostrará.

Notas:

2. Escribe un script que muestre un formulario con un campo de texto y que permita enviarlo usando el método POST. El mismo script será capaz de recibir el dato enviado por el formulario y lo mostrará.

Notas:

3. Escribe un script que muestre un formulario que permita introducir un número y mostrar su tabla de multiplicar.

4. Escribe un script que mediante un formulario permita seleccionar el número de monedas que se desean lanzar (de 1 a 20) y el tipo de moneda (Dólar Estadounidense, Euro, Yen japonés, Libra esterlina, Franco suizo). El comportamiento tiene que ser similar al de la web random.org.

Notas:

1.21 Ejercicios - Subida de ficheros

1. Escribe un script PHP que mediante un formulario solamente permita subir archivos de imágenes.

Notas:

1.22 Ejercicios - Objetos

Recursos:

  1. Define una clase llamada Persona que cumpla los siguientes requisitos:

Una vez definida la clase, realice dos instancias y utilice todos los métodos que ha creado.

1.23 Ejercicios - JSON

Recursos:

  1. Escribe un script que haga uso de la API de OpenWeatherMap y muestre la previsión metereológica de la ciudad que se indique en un formulario web.

1.24 Ejercicios - Acceso a bases de datos (Consulta)

Notas:

1.25 Ejercicios - Acceso a bases de datos (Inserción)

Notas:

1.26 Ejercicios - Acceso a bases de datos (Edición)

Notas:

1.27 Ejercicios - Acceso a bases de datos (Borrado)

Notas:

1.28 Sesiones

Notas:

2 Referencias

Los recursos que vamos a utilizar en esta práctica son los siguientes:

3 Licencia

Licencia de Creative Commons
Esta página forma parte del curso Implantación de Aplicaciones Web de José Juan Sánchez Hernández y su contenido se distribuye bajo una licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional.