Apuntes DAM
Tema 2 de 7DWES · 2º DAW

Desarrollo Web en Entorno Servidor

Fundamentos de PHP

PHP embebido en HTML, variables y tipos con strict_types, textos, arrays indexados y asociativos, estructuras de control, match, funciones con tipos y argumentos con nombre, e include/require, con retos en el IDE.

60 min lecturaPrincipiante

1. PHP vive dentro del HTML

PHP nació en 1994 como un conjunto de herramientas para páginas personales, y esa herencia se nota en su rasgo más característico: el código se mezcla con el HTML. Un fichero .php es, en principio, HTML normal; todo lo que va entre <?php y ?> se ejecuta en el servidor y lo que escribe con echo se inserta en ese punto de la página. El navegador nunca ve el código PHP, solo el HTML resultante.

saludo.php
1<?php
2$nombre = 'Lucía';
3$hora = (int) date('G');
4$saludo = $hora < 14 ? 'Buenos días' : 'Buenas tardes';
5?>
6<!doctype html>
7<html lang="es">
8<body>
9  <h1><?= $saludo ?>, <?= htmlspecialchars($nombre) ?></h1>
10
11  <?php if ($hora >= 22): ?>
12    <p>Se hace tarde, ¡a descansar!</p>
13  <?php endif; ?>
14</body>
15</html>

Fíjate en dos detalles. <?= … ?> es la forma corta de <?php echo … ?>, perfecta para insertar un valor. Y dentro del HTML se usa la sintaxis alternativa de las estructuras de control (if (…): … endif;, foreach (…): … endforeach;), que se lee mucho mejor que llaves sueltas entre etiquetas. Cuando un fichero es solo PHP, se omite el ?> final para no enviar espacios en blanco por accidente.

Aprende PHP 8 desde cero: Curso para principiantes + Aplicación con Deploy — midulive

2. Variables, tipos y textos

Las variables empiezan siempre por $ y no se declaran: existen desde que les das un valor. PHP es de tipado dinámico, como JavaScript, pero desde la versión 7 permite declarar los tipos de los parámetros y del valor devuelto de las funciones. Si además escribes declare(strict_types=1); al principio del fichero, PHP dejará de convertir tipos por su cuenta y te avisará en cuanto pases un texto donde esperaba un número. Es una red de seguridad que conviene usar siempre.

TipoEjemploComprobación
int42is_int($x)
float3.14is_float($x)
string'hola' o "hola $nombre"is_string($x)
booltrue, falseis_bool($x)
array[1, 2, 3] o ['clave' => 'valor']is_array($x)
nullnullis_null($x) o $x === null
objectnew Producto()$x instanceof Producto

Comillas simples y dobles

Con comillas simples el texto es literal. Con comillas dobles PHP sustituye las variables que encuentre y reconoce secuencias como \n. Para expresiones más complejas, envuelve la variable entre llaves. Y para concatenar se usa el punto, no el +:

php
1$producto = ['nombre' => 'Teclado', 'precio' => 24.99];
2
3echo 'Hola $nombre\n';                       // literal: Hola $nombre\n
4echo "Precio: {$producto['precio']} €\n";     // sustituye el valor
5echo 'Total: ' . $producto['precio'] * 2 . " €\n";
6echo number_format(1234.5, 2, ',', '.');      // 1.234,50

3. Arrays: la navaja suiza de PHP

En PHP, un array es a la vez una lista y un diccionario: cada elemento tiene una clave, que puede ser un número (array indexado) o un texto (array asociativo). Con arrays se representan casi todos los datos de una aplicación: una fila de la base de datos es un array asociativo, y un listado es un array de ellos.

Tres formas de usar un array

Lista
$colores = ['rojo', 'verde']; las claves son 0, 1, 2… automáticamente.
Ficha
$alumno = ['nombre' => 'Ana', 'nota' => 8]; cada dato tiene su nombre.
Tabla
$alumnos = [['nombre' => 'Ana'], ['nombre' => 'Luis']]; un array de fichas, como filas.
php
1$notas = ['Ana' => 8.5, 'Luis' => 4, 'Marta' => 9.25];
2
3foreach ($notas as $alumno => $nota) {
4    echo "$alumno: $nota\n";
5}
6
7$aprobados = array_filter($notas, fn($n) => $n >= 5);          // conserva las claves
8$redondeadas = array_map(fn($n) => round($n), $notas);
9arsort($notas);                                                // ordena por valor, de mayor a menor
10echo implode(', ', array_keys($aprobados));                    // Ana, Marta
11echo count($notas), ' ', array_sum($notas) / count($notas);
FunciónPara qué
count, in_array, array_key_existsCuántos hay, si está un valor, si existe una clave
array_map, array_filter, array_reduceTransformar, filtrar y acumular (como en JavaScript)
sort / rsort, asort / arsort, ksort, usortOrdenar por valor, por valor conservando claves, por clave o con una función
array_slice, array_merge, array_columnExtraer un trozo, unir arrays, sacar una columna de una tabla
explode / implodeTexto → array y array → texto

4. Estructuras de control y funciones

if, while, for y switch funcionan como en Java o JavaScript. PHP añade foreach, la forma natural de recorrer arrays, y desde PHP 8 la expresión match, una versión moderna de switch que devuelve un valor, compara con === y no necesita break.

php
1declare(strict_types=1);
2
3function precioFinal(float $precio, float $iva = 0.21, float $descuento = 0): float
4{
5    return round($precio * (1 - $descuento) * (1 + $iva), 2);
6}
7
8echo precioFinal(100);                        // 121
9echo precioFinal(100, descuento: 0.1);        // 108.9 (argumento con nombre)
10
11$envio = match (true) {
12    $total >= 50 => 0,
13    $total >= 20 => 2.95,
14    default => 4.95,
15};

Los argumentos con nombre (descuento: 0.1) permiten saltarse los parámetros opcionales intermedios y hacen las llamadas más legibles. Las funciones flecha (fn($x) => $x * 2) sirven para funciones cortas y pueden usar las variables de alrededor sin más; las funciones anónimas normales necesitan declararlas con use ($variable).

Dividir el código en ficheros

Para reutilizar código entre páginas se usan require e include. La diferencia es qué pasa si el fichero no existe: require detiene el script con un error y include solo avisa. Las versiones require_once e include_once evitan cargar dos veces el mismo fichero. Para una cabecera y un pie comunes, require 'partes/cabecera.php'; en proyectos modernos, el autoload de Composer carga las clases automáticamente.

  • Errores típicos: olvidar el $, usar + para unir textos, comparar con == (con "abc" == 0 ya no es true desde PHP 8, pero === sigue siendo lo correcto), y escribir echo de datos del usuario sin htmlspecialchars.

Tu mejor aliado: la documentación

php.net tiene la documentación de cada función en español, con ejemplos y notas de la comunidad. Escribe php.net/nombre_funcion en la barra de direcciones y llegas directamente.

5. Pruébalo y practica

Este editor ejecuta PHP 8.3 de verdad en un servidor. Los programas leen datos de la entrada estándar (lo que escribas en el cuadro de entrada), igual que un script leería los datos de un formulario.

🐘PHPLaboratorio de PHP

Cambia los datos y ejecuta.

Ejecuta el código para ver la salida

Retos de PHP en el IDE

Escribe el código que falta y pulsa Ejecutar tests: se ejecuta con PHP 8.3 real y se prueba con varios casos, algunos ocultos.

🐘PHPTabla de multiplicar en HTMLFácil

PHP genera HTML. Lee un número de la entrada y escribe su tabla de multiplicar del 1 al 10 como una tabla HTML, con una fila por línea y dos espacios de sangría: « <tr><td>7 x 1</td><td>7</td></tr>». Si la entrada no es un entero entre 1 y 100, escribe «<p>Número no válido</p>».

⏳
Tabla del 7
⏳
Entrada no válida
⏳
Test oculto #3
⏳
Test oculto #4
0/4 tests pasados
🐘PHPLas palabras más repetidasMedio

Lee un texto (puede tener varias líneas) y muestra las tres palabras más frecuentes con el formato «palabra: veces», en minúsculas. Una palabra es una secuencia de letras (incluidas las tildes y la ñ). Si dos palabras se repiten lo mismo, va primero la que sea menor alfabéticamente.

⏳
Refrán
⏳
Mayúsculas y signos
⏳
Test oculto #3
0/3 tests pasados
🐘PHPTicket de compraMedio

Cada línea de la entrada es «producto;precio;cantidad». Escribe una línea por producto con el formato «Teclado x 2 = 49,98 €» y al final la base, el IVA y el total: «Base: 62,48 €», «IVA (21%): 13,12 €», «Total: 75,60 €». Las cantidades usan coma decimal y punto de miles (1.234,50 €). Las líneas que no tengan tres campos, un precio numérico y una cantidad entera se ignoran mostrando «Línea ignorada: …».

⏳
Compra normal
⏳
Líneas erróneas
⏳
Test oculto #3
0/3 tests pasados

¿Has terminado este tema?

Crea una cuenta gratis para guardar qué temas has terminado, subir de nivel y ganar medallas.

Guardar mi progreso