Módulo 00: Introducción

Objetivos del módulo

  • Entender qué es PHP y qué significa que sea un lenguaje del lado del servidor
  • Comprender paso a paso qué ocurre desde que escribes una URL hasta que ves la página
  • Conocer la historia de PHP y las novedades de cada versión hasta PHP 8.5
  • Saber cómo funciona el ciclo de soporte de versiones y por qué importa
  • Descubrir quién usa PHP hoy y cómo se compara con otros lenguajes de backend
  • Identificar qué tipo de proyectos puedes construir con PHP
  • Leer y entender tu primer programa “Hola mundo”

1. ¿Qué es PHP?

📘 Concepto: PHP es un lenguaje de programación de propósito general, especialmente diseñado para el desarrollo web. Su código se ejecuta en el servidor, que genera como resultado una página HTML (o un JSON, una imagen, un PDF…) y la envía al navegador del usuario.

El nombre es un acrónimo recursivo: PHP: Hypertext Preprocessor (“PHP: preprocesador de hipertexto”). La palabra “preprocesador” describe muy bien su función original: procesar un documento antes de entregarlo, rellenando los huecos con datos.

Características principales

Característica Qué significa para ti
Interpretado No necesitas compilar: escribes el código, guardas y lo ejecutas. El intérprete lo traduce sobre la marcha
Del lado del servidor El usuario nunca ve tu código PHP, solo el resultado que genera
Código abierto y gratuito Puedes usarlo en proyectos personales y comerciales sin pagar licencias
Multiplataforma Funciona en Windows, macOS, Linux y prácticamente cualquier servidor
Tipado dinámico… y opcionalmente estricto Las variables no necesitan declarar su tipo, pero PHP moderno permite tipar todo y que el motor lo compruebe
Multiparadigma Puedes programar de forma estructurada, orientada a objetos o con estilo funcional
Integrado con la web Acceso directo a formularios, cookies, sesiones, cabeceras HTTP y bases de datos
Enorme ecosistema Composer y Packagist ofrecen cientos de miles de librerías listas para usar

Una analogía: el restaurante

Imagina que una página web es un plato en un restaurante:

  • El navegador es el cliente sentado a la mesa. Pide un plato (una página) y se lo come (lo muestra).
  • El servidor web (Apache, Nginx) es el camarero: recibe el pedido y lo lleva a la cocina.
  • PHP es el cocinero: con los ingredientes (base de datos, ficheros, datos del formulario) prepara el plato en el momento.
  • El HTML resultante es el plato terminado que llega a la mesa.

El cliente nunca entra en la cocina ni ve la receta: solo recibe el plato. Del mismo modo, el usuario nunca ve tu código PHP, solo el HTML que produce.

💡 Consejo: Si vienes de HTML y CSS, piensa en PHP como la forma de que tus páginas dejen de ser “fotos fijas” y pasen a ser “plantillas” que se rellenan con datos distintos para cada usuario y cada momento.


2. Lado del cliente frente a lado del servidor

En el desarrollo web hay dos “mundos” que trabajan juntos:

Aspecto Lado del cliente (frontend) Lado del servidor (backend)
Dónde se ejecuta En el navegador del usuario En el servidor (otro ordenador)
Lenguajes típicos HTML, CSS, JavaScript PHP, Python, Java, C#, JavaScript (Node.js), Go, Ruby
¿Puede verse el código? Sí (Ver código fuente / DevTools) No, solo el resultado
Acceso a base de datos No directamente Sí
Acceso a ficheros del servidor No Sí
Ejemplos de tareas Animaciones, validar un campo mientras escribes, menús desplegables Iniciar sesión, guardar un pedido, enviar un correo, generar una factura

⚠️ Importante: Cualquier comprobación que hagas en el navegador (JavaScript) puede saltarse fácilmente, porque el usuario controla su navegador. Las validaciones de verdad (¿es correcta esta contraseña?, ¿tiene saldo suficiente?) deben hacerse siempre en el servidor. Ese es uno de los papeles fundamentales de PHP.

Páginas estáticas frente a dinámicas

Una página estática es un fichero .html que el servidor entrega tal cual: todos los visitantes ven exactamente lo mismo.

Una página dinámica se genera en cada petición. Por ejemplo, la página “Mis pedidos” de una tienda online es distinta para cada cliente: PHP consulta la base de datos, obtiene tus pedidos y construye un HTML a medida.

Página estática:   fichero.html  ──────────────────────────────► navegador
Página dinámica:   fichero.php ──► PHP ejecuta + consulta BD ──► HTML ──► navegador

3. Cómo funciona una petición web con PHP

Vamos a seguir el viaje completo de una petición. Supón que visitas https://mitienda.es/productos.php?categoria=libros.

sequenceDiagram
    participant N as Navegador
    participant S as Servidor web (Apache / Nginx)
    participant P as Intérprete PHP
    participant B as Base de datos
    N->>S: 1. Petición HTTP GET /productos.php?categoria=libros
    S->>S: 2. ¿Es un fichero .php? Sí, se lo paso a PHP
    S->>P: 3. Ejecuta productos.php con los datos de la petición
    P->>B: 4. SELECT * FROM productos WHERE categoria = 'libros'
    B-->>P: 5. Filas con los libros
    P->>P: 6. Construye el HTML con los resultados
    P-->>S: 7. Devuelve el HTML generado
    S-->>N: 8. Respuesta HTTP 200 con el HTML
    N->>N: 9. Pinta la página (y pide CSS, JS e imágenes)

Paso a paso:

  1. El navegador envía una petición HTTP al servidor. Incluye el método (GET), la ruta (/productos.php), los parámetros (categoria=libros), las cookies y otras cabeceras.
  2. El servidor web (Apache o Nginx) mira la extensión. Si es un .css o un .jpg, lo devuelve directamente. Si es un .php, sabe que debe ejecutarlo.
  3. El intérprete PHP recibe el fichero y los datos de la petición (que estarán disponibles en variables como $_GET, $_POST o $_COOKIE).
  4. PHP ejecuta el código: puede consultar una base de datos, leer ficheros, llamar a otra API…
  5. Recibe los datos que necesita.
  6. Genera la salida: normalmente HTML, aunque podría ser JSON, XML, un PDF o una imagen.
  7. Entrega esa salida al servidor web.
  8. El servidor web envía la respuesta HTTP al navegador, con un código de estado (200 OK, 404 Not Found…) y el contenido.
  9. El navegador interpreta el HTML y lo muestra. Si el HTML enlaza CSS, JavaScript o imágenes, hará nuevas peticiones para descargarlos.

📘 Concepto: PHP sigue un modelo llamado share nothing (“no compartir nada”): cada petición empieza desde cero, con su propia memoria, y al terminar todo se libera. Esto hace que PHP sea muy robusto (un error en una petición no afecta a las demás) y fácil de escalar (puedes añadir más servidores sin complicaciones). Para “recordar” cosas entre peticiones se usan sesiones, cookies y bases de datos, que verás en módulos posteriores.

Lo que escribes frente a lo que recibe el navegador

Este es el fichero hora.php que tienes en el servidor:

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>¿Qué hora es?</title>
</head>
<body>
    <h1>Hora del servidor</h1>
    <p>Ahora mismo son las <?= date('H:i:s') ?></p>
</body>
</html>

Y esto es lo que recibe el navegador (lo puedes comprobar con “Ver código fuente”):

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>¿Qué hora es?</title>
</head>
<body>
    <h1>Hora del servidor</h1>
    <p>Ahora mismo son las 17:42:08</p>
</body>
</html>

El fragmento <?= date('H:i:s') ?> ha desaparecido y en su lugar está la hora. El navegador no sabe que existió código PHP: solo ve HTML normal.

⚠️ Importante: Si abres un fichero .php haciendo doble clic (con una ruta del tipo file:///C:/...), el navegador mostrará el código sin ejecutar o lo descargará. Un fichero PHP siempre debe servirse a través de un servidor web con PHP. En el próximo módulo aprenderás a montarlo.

Las formas de ejecutar PHP (SAPI)

El intérprete de PHP se conecta con el mundo exterior mediante una SAPI (Server API). No necesitas dominarlas ahora, pero conviene que te suenen:

SAPI Uso habitual
Apache + mod_php Clásico en hostings compartidos y en XAMPP. PHP funciona como un módulo dentro de Apache
PHP-FPM El estándar en producción con Nginx (y también con Apache). PHP corre como un servicio independiente con un grupo de procesos
CLI Línea de comandos: php script.php. Para scripts, tareas programadas, herramientas como Composer o PHPUnit
Servidor integrado php -S localhost:8000. Un pequeño servidor web para desarrollo, nunca para producción

¿Es lento por ser interpretado?

Hace años PHP tenía fama de lento, pero hoy no es así:

  • OPcache guarda en memoria el código ya compilado a bytecode (las instrucciones internas del motor), así que no se vuelve a analizar el fichero en cada petición.
  • PHP 7 duplicó aproximadamente el rendimiento respecto a PHP 5.6 gracias al nuevo motor.
  • PHP 8 añadió un compilador JIT (Just In Time) que traduce partes del código a instrucciones de la máquina. Es especialmente útil en cálculos intensivos.

💡 Consejo: En aplicaciones web típicas, el cuello de botella casi nunca es PHP, sino las consultas a la base de datos o las llamadas a servicios externos. Aprenderás a optimizar eso más adelante.


4. Historia de PHP

PHP tiene ya más de 30 años. Conocer su historia te ayudará a entender por qué encontrarás en internet código PHP muy distinto (y a veces muy anticuado).

timeline
    title Evolución de PHP
    1995 : PHP/FI (Rasmus Lerdorf)
    1998 : PHP 3 (Gutmans y Suraski)
    2000 : PHP 4 y Zend Engine
    2004 : PHP 5 y la POO moderna
    2015 : PHP 7 duplica el rendimiento
    2020 : PHP 8.0 y el JIT
    2025 : PHP 8.5 y el operador pipe

Los orígenes: PHP/FI (1994-1995)

Rasmus Lerdorf creó un conjunto de scripts en C para controlar las visitas a su currículum online. Los llamó Personal Home Page Tools. Al añadir la capacidad de procesar formularios surgió PHP/FI (Personal Home Page / Forms Interpreter), que publicó como código abierto en 1995. No era un lenguaje “diseñado”, sino una herramienta práctica que fue creciendo según las necesidades.

PHP 3 y PHP 4 (1998-2000)

Dos estudiantes israelíes, Andi Gutmans y Zeev Suraski, reescribieron el analizador desde cero: nació PHP 3 (1998), ya con el nombre recursivo PHP: Hypertext Preprocessor. Después crearon el Zend Engine (Zend viene de Zeev + Andi), el motor sobre el que se construyó PHP 4 (2000), que añadió sesiones, mejor rendimiento y soporte para más servidores web.

PHP 5 (2004): la madurez

PHP 5, con el Zend Engine 2, trajo una programación orientada a objetos de verdad (visibilidad public/private/protected, interfaces, clases abstractas, excepciones), además de PDO para bases de datos y soporte mejorado de XML. Versiones posteriores como 5.3 (namespaces, closures) y 5.4 (traits, sintaxis corta de arrays []) modernizaron mucho el lenguaje.

Durante esta época nacieron WordPress (2003), Drupal, Symfony (2005) y Laravel (2011), y apareció Composer (2012), que revolucionó la forma de compartir código.

📘 Concepto: ¿Y PHP 6? Existió un proyecto para dar soporte completo a Unicode que acabó abandonado. Para evitar confusiones con libros y artículos que ya hablaban de “PHP 6”, la comunidad decidió saltar directamente de PHP 5 a PHP 7.

PHP 7 (2015): la revolución del rendimiento

PHP 7 incorporó un motor renovado (el proyecto PHPNG) que duplicaba la velocidad y reducía mucho el consumo de memoria. También introdujo declaraciones de tipos escalares, tipos de retorno, declare(strict_types=1), los operadores ?? y <=> y las clases anónimas. Las versiones 7.1 a 7.4 añadieron tipos nullable, void, propiedades tipadas, arrow functions y el operador ??=.

PHP 8 (2020-hoy): PHP moderno

A partir de PHP 8 se publica una versión nueva cada noviembre. Cada una añade funcionalidades que acercan PHP a lenguajes como C#, Kotlin o TypeScript, sin perder su sencillez.

Tabla de novedades por versión

Versión Fecha Novedades destacadas
PHP/FI 2.0 1997 Primera versión ampliamente usada; procesado de formularios
PHP 3 1998 Analizador reescrito, extensibilidad, nombre actual
PHP 4 2000 Zend Engine 1, sesiones, output buffering
PHP 5 2004 Zend Engine 2, POO completa, excepciones, PDO, SimpleXML
PHP 5.3 2009 Namespaces, closures (funciones anónimas), late static binding
PHP 5.4 2012 Traits, sintaxis corta [] para arrays, servidor integrado php -S
PHP 5.5 / 5.6 2013-2014 Generadores (yield), finally, OPcache incluido, operador ..., **
PHP 7.0 2015 Motor PHPNG (≈2x más rápido), tipos escalares y de retorno, strict_types, ??, <=>
PHP 7.1 - 7.3 2016-2018 Tipos nullable ?int, void, iterable, visibilidad en constantes, desestructuración con claves
PHP 7.4 2019 Propiedades tipadas, arrow functions fn() =>, ??=, spread en arrays, preloading
PHP 8.0 nov 2020 JIT, argumentos con nombre, atributos #[...], tipos unión, match, operador nullsafe ?->, constructor promotion, str_contains()
PHP 8.1 nov 2021 Enums, propiedades readonly, fibers, tipo never, first-class callables strlen(...), new en inicializadores
PHP 8.2 dic 2022 Clases readonly, tipos DNF, null/false/true como tipos independientes, extensión Random, propiedades dinámicas obsoletas
PHP 8.3 nov 2023 Constantes de clase tipadas, atributo #[\Override], json_validate(), mb_str_pad()
PHP 8.4 nov 2024 Property hooks, visibilidad asimétrica public private(set), new sin paréntesis, array_find(), array_any(), array_all(), #[\Deprecated], lazy objects, mb_trim()
PHP 8.5 nov 2025 Operador pipe \|>, clone() con propiedades a modificar, extensión URI, atributo #[\NoDiscard], array_first()/array_last(), closures en expresiones constantes, backtraces en errores fatales

Un vistazo a PHP 8.5

No te preocupes si ahora no entiendes todos los detalles: cada novedad se explica en su módulo correspondiente. Este es un adelanto de lo que vas a aprender:

<?php

declare(strict_types=1);

// Operador pipe |> : encadena funciones de izquierda a derecha
$titulo = '  Curso de PHP 8.5  '
    |> trim(...)
    |> strtoupper(...);

echo $titulo; // CURSO DE PHP 8.5

// array_first() y array_last(): primer y último valor de un array
$notas = [7.5, 9.0, 6.25];
echo array_first($notas); // 7.5
echo array_last($notas);  // 6.25

Compara con cómo se escribía lo mismo antes del operador pipe:

<?php

// Hay que leer "de dentro hacia fuera": primero trim, luego strtoupper
$titulo = strtoupper(trim('  Curso de PHP 8.5  '));

💡 Consejo: Cuando busques ayuda en internet, fíjate siempre en la fecha y la versión de PHP del artículo. Mucho código antiguo usa funciones eliminadas (como mysql_query(), eliminada en PHP 7) o prácticas inseguras. En este curso usarás siempre PHP moderno.


5. El ciclo de soporte de versiones

Cada versión de PHP tiene una vida limitada. El equipo de PHP sigue esta política:

Fase Duración Qué incluye
Soporte activo 2 años desde su publicación Corrección de errores y de seguridad, versiones de mantenimiento periódicas (8.5.1, 8.5.2…)
Solo seguridad 2 años más Únicamente parches para fallos de seguridad críticos
Fin de vida (EOL) A partir de ahí Ningún parche. Usarla en producción es un riesgo

Las fechas de fin de cada fase se ajustan siempre al 31 de diciembre. Esta es la situación en octubre de 2026:

Versión Publicada Soporte activo hasta Seguridad hasta Estado
8.1 25 nov 2021 25 nov 2023 31 dic 2025 ❌ Fin de vida
8.2 8 dic 2022 31 dic 2024 31 dic 2026 ⚠️ Solo seguridad (últimos meses)
8.3 23 nov 2023 31 dic 2025 31 dic 2027 ⚠️ Solo seguridad
8.4 21 nov 2024 31 dic 2026 31 dic 2028 ✅ Soporte activo
8.5 20 nov 2025 31 dic 2027 31 dic 2029 ✅ Soporte activo (versión actual)

📘 Concepto: La siguiente versión, PHP 8.6, está en fase de release candidate y su publicación está prevista para noviembre de 2026. Todo lo que aprendas con PHP 8.5 seguirá siendo válido: las versiones menores (8.x) mantienen la compatibilidad salvo funcionalidades marcadas como obsoletas con antelación.

¿Qué significan los números de versión?

PHP usa versionado semántico con el formato MAYOR.MENOR.PARCHE:

  8 . 5 . 3
  │   │   └── Parche: correcciones de errores y seguridad. Actualiza siempre.
  │   └────── Menor: nuevas funcionalidades, compatible hacia atrás (con avisos de obsoletos).
  └────────── Mayor: puede romper compatibilidad (PHP 7 → PHP 8).

⚠️ Importante: Cuando contrates un hosting o despliegues un proyecto, comprueba que la versión de PHP esté soportada. Una versión en fin de vida no recibe parches de seguridad: cualquier vulnerabilidad descubierta quedará abierta para siempre.


6. ¿Quién usa PHP?

A pesar de los rumores de que “PHP está muerto” (que llevan oyéndose más de una década), PHP sigue siendo el lenguaje de servidor más usado en la web. Según las estadísticas de W3Techs de 2026, alrededor del 70 % de los sitios web cuyo lenguaje de servidor es conocido usan PHP.

Gran parte de esa cuota se debe a WordPress, que por sí solo mueve más del 40 % de todos los sitios web del mundo.

Aplicaciones y frameworks más conocidos

Nombre Tipo Para qué se usa
WordPress CMS Blogs, webs corporativas, tiendas (con WooCommerce). El CMS más usado del mundo
Drupal CMS Portales grandes e institucionales, webs de administraciones públicas
Joomla CMS Webs corporativas y comunidades
PrestaShop / Magento (Adobe Commerce) Comercio electrónico Tiendas online de todos los tamaños
Moodle Plataforma educativa Campus virtuales de universidades y colegios
MediaWiki Wiki El software que mueve Wikipedia
Nextcloud Nube privada Almacenamiento y colaboración autoalojados
Laravel Framework Aplicaciones web y APIs; muy popular por su elegancia y productividad
Symfony Framework Aplicaciones empresariales; sus componentes los usan Laravel, Drupal y muchos otros
CodeIgniter / Slim Framework Proyectos ligeros, microservicios y APIs

Empresas y servicios

Plataformas como Wikipedia, Slack (en su backend original), Etsy o Mailchimp se han construido en gran parte con PHP. Facebook nació en PHP y más tarde creó su propio dialecto, Hack, para su escala gigantesca.

💡 Consejo: Para el mercado laboral, PHP es una apuesta segura: hay una cantidad enorme de proyectos en producción que mantener y evolucionar, y Laravel y Symfony son muy demandados en España y en remoto.


7. PHP frente a otros lenguajes de backend

No existe “el mejor lenguaje”, sino el más adecuado para cada proyecto y equipo. Esta tabla te da una visión general:

Lenguaje Frameworks típicos Puntos fuertes Puntos débiles
PHP Laravel, Symfony Pensado para la web, despliegue sencillo, hosting barato en todas partes, ecosistema CMS enorme Mala fama heredada de código antiguo; menos usado fuera de la web
JavaScript / TypeScript (Node.js) Express, NestJS Mismo lenguaje en cliente y servidor, ideal para tiempo real Ecosistema muy cambiante; dependencias numerosas
Python Django, FastAPI Sintaxis muy legible, líder en ciencia de datos e IA Despliegue algo más complejo que PHP en hostings sencillos
Java Spring Boot Muy robusto, enorme en grandes empresas y banca Más verboso; curva de aprendizaje mayor
C# ASP.NET Core Rendimiento excelente, herramientas de Microsoft Ecosistema más ligado a Microsoft/Azure
Go Gin, Echo Muy rápido, ideal para microservicios y concurrencia Menos orientado a webs completas con plantillas
Ruby Ruby on Rails Muy productivo, convenciones claras Comunidad más pequeña que hace unos años

¿Por qué aprender PHP?

  1. Curva de aprendizaje suave: puedes tener una página dinámica funcionando en minutos.
  2. Despliegue trivial: casi cualquier hosting, incluso el más barato, soporta PHP. Subes los ficheros y funciona.
  3. Documentación excelente: el manual oficial en php.net tiene ejemplos para cada función, y está traducido al español.
  4. PHP moderno es un gran lenguaje: tipos estrictos, enums, readonly, atributos, property hooks, operador pipe… nada que envidiar a otros lenguajes.
  5. Empleo: miles de empresas mantienen aplicaciones PHP.

8. ¿Qué se puede hacer con PHP?

Páginas y aplicaciones web

El uso principal: webs dinámicas con formularios, áreas privadas, paneles de administración, tiendas online, foros, intranets… Todo lo que necesite datos y usuarios.

APIs REST

Hoy muchas aplicaciones separan el frontend (React, Vue, una app móvil) del backend. PHP es perfecto para crear el backend que devuelve datos en JSON:

<?php

declare(strict_types=1);

// api/producto.php - un endpoint mínimo que devuelve JSON
header('Content-Type: application/json; charset=utf-8');

$producto = [
    'id'     => 42,
    'nombre' => 'Teclado mecánico',
    'precio' => 79.90,
];

// JSON_UNESCAPED_UNICODE mantiene las tildes legibles (sin á)
echo json_encode($producto, JSON_UNESCAPED_UNICODE);

Respuesta que recibe el cliente:

{"id":42,"nombre":"Teclado mecánico","precio":79.9}

Scripts de línea de comandos (CLI)

PHP no necesita un navegador. Puedes ejecutar scripts desde la terminal para importar datos, generar informes, hacer copias de seguridad o lanzar tareas programadas (cron):

<?php

declare(strict_types=1);

// limpiar.php - borra los ficheros temporales con más de 7 días
$carpeta = __DIR__ . '/tmp';
$limite  = time() - 7 * 24 * 60 * 60;
$borrados = 0;

foreach (glob($carpeta . '/*') as $fichero) {
    if (is_file($fichero) && filemtime($fichero) < $limite) {
        unlink($fichero);
        $borrados++;
    }
}

echo "Ficheros borrados: $borrados" . PHP_EOL;
php limpiar.php
# Ficheros borrados: 12

Herramientas que usarás a diario, como Composer o PHPUnit, son precisamente programas PHP de línea de comandos.

Otras posibilidades

Uso Ejemplo
Generar documentos Facturas en PDF, hojas de cálculo, CSV
Procesar imágenes Miniaturas, marcas de agua (extensión GD o Imagick)
Enviar correos Confirmaciones de registro, boletines
Tareas en segundo plano Colas de trabajos con Symfony Messenger o Laravel Queues
Tiempo real WebSockets y servidores asíncronos con librerías como ReactPHP o Swoole

Para qué NO es la mejor opción

  • Aplicaciones de escritorio con interfaz gráfica (mejor C#, Java, Electron…).
  • Apps móviles nativas (mejor Kotlin, Swift, Flutter). PHP sí puede ser su backend.
  • Ciencia de datos e inteligencia artificial (Python domina este campo).
  • Programación de sistemas o videojuegos (C, C++, Rust).

9. Mitos y realidades sobre PHP

Mito Realidad
“PHP está muerto” Mueve alrededor del 70 % de las webs con lenguaje de servidor conocido y publica una versión nueva cada año
“PHP es lento” Desde PHP 7, con OPcache y JIT, es de los lenguajes interpretados más rápidos para la web
“PHP es inseguro” El lenguaje no es inseguro; el código mal escrito sí lo es. Con consultas preparadas, escapado de salida y buenas prácticas (módulo 16) es tan seguro como cualquier otro
“PHP no tiene tipos” PHP moderno tiene tipos escalares, unión, intersección, enums, never, readonly y modo estricto
“PHP es solo para webs pequeñas” Wikipedia, Slack o grandes tiendas online demuestran lo contrario

📘 Concepto: Gran parte de la mala fama de PHP viene de código de los años 2000: mezcla caótica de HTML, SQL y lógica en el mismo fichero, consultas construidas concatenando texto (inyección SQL) y ausencia de tipos. En este curso aprenderás la forma profesional de hacerlo desde el principio.


10. Tu primer “Hola mundo” (conceptual)

Todavía no tienes PHP instalado (lo harás en el próximo módulo), pero ya puedes entender cómo es un programa PHP.

Versión mínima

<?php

echo 'Hola mundo';

Analicemos cada parte:

Parte Significado
<?php Etiqueta de apertura. Indica al intérprete: “a partir de aquí, esto es código PHP”
echo Instrucción que envía texto a la salida (al navegador o a la terminal)
'Hola mundo' Una cadena de texto, entre comillas
; Punto y coma: marca el final de la instrucción. ¡Es obligatorio!

Al ejecutarlo en la terminal verías:

Hola mundo

Versión moderna (la que usarás en el curso)

<?php

declare(strict_types=1);

$nombre = 'mundo';

echo "¡Hola, $nombre!" . PHP_EOL;

Salida:

¡Hola, mundo!

Novedades respecto a la versión mínima:

  • declare(strict_types=1); activa el tipado estricto: PHP no convertirá tipos “a escondidas”. Lo explicaremos en el módulo 02; de momento, acostúmbrate a ponerlo al principio de cada fichero.
  • $nombre es una variable. En PHP todas las variables empiezan por $.
  • Con comillas dobles, PHP sustituye $nombre por su valor (interpolación).
  • . es el operador de concatenación (une textos).
  • PHP_EOL es una constante con el salto de línea adecuado para el sistema operativo.

Versión web: PHP dentro de HTML

<?php
declare(strict_types=1);

$nombre = 'Ana';
$hora   = (int) date('G'); // Hora actual de 0 a 23

$saludo = $hora < 14 ? 'Buenos días' : 'Buenas tardes';
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Mi primera página PHP</title>
</head>
<body>
    <h1><?= $saludo ?>, <?= $nombre ?></h1>
    <p>Esta página se ha generado el <?= date('d/m/Y') ?>.</p>
</body>
</html>

Si visitas esta página por la mañana, el navegador recibirá:

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Mi primera página PHP</title>
</head>
<body>
    <h1>Buenos días, Ana</h1>
    <p>Esta página se ha generado el 03/10/2026.</p>
</body>
</html>

💡 Consejo: Fíjate en la etiqueta <?=: es un atajo de <?php echo ... ?>. Es la forma más cómoda de “imprimir” un valor dentro de HTML, y la usarás constantemente en las plantillas.

✏️ Ejercicio: Sin ejecutarlo, escribe en un papel qué HTML recibiría el navegador si el código anterior se ejecutara a las 18:30 con $nombre = 'Luis'. Luego, cuando tengas tu entorno instalado (módulo 01), compruébalo.


11. Cómo sacar partido a este curso

Recursos oficiales

Recurso URL Para qué
Manual de PHP (español) https://www.php.net/manual/es/ Referencia de cada función, con ejemplos
Notas de versión https://www.php.net/releases/8.5/es.php Novedades de cada versión
Versiones soportadas https://www.php.net/supported-versions.php Fechas de soporte
Packagist https://packagist.org Repositorio de librerías para Composer
PHP The Right Way https://phptherightway.com Buenas prácticas de la comunidad

💡 Consejo: Acostúmbrate a consultar el manual oficial. Si no recuerdas qué hace una función, escribe en el navegador php.net/nombre_funcion (por ejemplo, php.net/str_contains) y te llevará directamente a su página.

Método de trabajo recomendado

  1. Lee la explicación de cada sección.
  2. Escribe los ejemplos a mano (no copies y pegues): así se fija la sintaxis.
  3. Modifica los ejemplos: cambia valores, provoca errores a propósito y lee los mensajes.
  4. Resuelve los ejercicios del final de cada módulo antes de pasar al siguiente.
  5. Repasa la tabla resumen de cada módulo a los pocos días.

⚠️ Importante: Los errores son tus aliados. PHP 8.5 da mensajes de error muy claros (e incluso incluye la traza completa en los errores fatales). Léelos con calma: casi siempre te dicen exactamente qué ha fallado y en qué línea.


12. Ejercicios

Ejercicio 1: Cliente o servidor

Clasifica cada tarea como cliente (HTML/CSS/JavaScript en el navegador) o servidor (PHP) y justifica tu respuesta:

  1. Cambiar el color de un botón al pasar el ratón por encima.
  2. Comprobar que el usuario y la contraseña son correctos.
  3. Mostrar un mensaje “Campo obligatorio” mientras el usuario escribe.
  4. Guardar un comentario en la base de datos.
  5. Enviar un correo de confirmación de compra.
  6. Mostrar una animación de carga.
  7. Calcular el precio final de un pedido con descuentos.

Ejercicio 2: El viaje de una petición

Dibuja (en papel o con Mermaid) el recorrido completo de la petición https://miblog.es/articulo.php?id=7. Incluye: navegador, servidor web, intérprete PHP y base de datos. Indica en cada flecha qué información viaja (la URL, la consulta SQL, las filas, el HTML…).

Ejercicio 3: Línea del tiempo

Elabora una tabla con tres columnas (versión, año, novedad que más te llama la atención) para PHP 5, 7.0, 7.4, 8.0, 8.1, 8.4 y 8.5. Investiga en php.net/releases una novedad adicional de PHP 8.5 que no aparezca en este módulo.

Ejercicio 4: Elegir versión

Una empresa te dice que su web funciona con PHP 8.1 y que “como va bien, no piensan tocarla”. Redacta un párrafo explicándoles, con las fechas del ciclo de soporte, por qué deberían planificar la actualización y a qué versión les recomendarías migrar.

Ejercicio 5: Investiga el ecosistema

Elige un CMS (WordPress, Drupal o Moodle) y un framework (Laravel o Symfony). Para cada uno, averigua en su web oficial:

  • Qué versión mínima de PHP requiere su última versión.
  • Un ejemplo real de sitio web que lo use.
  • Qué tipo de proyecto harías con él.

Ejercicio 6: Predice la salida

Sin ejecutarlo, escribe qué HTML recibirá el navegador con este código:

<?php
$producto = 'Auriculares';
$precio   = 49.95;
$unidades = 3;
?>
<p>Has comprado <?= $unidades ?> unidades de <?= $producto ?>.</p>
<p>Total: <?= $precio * $unidades ?> €</p>

Pista: * es el operador de multiplicación.

Ejercicio 7: Mitos

Un compañero afirma: “PHP es inseguro, por eso hackean tantos WordPress”. Escribe una respuesta argumentada (5-8 líneas) explicando dónde está realmente el problema y qué factores influyen en la seguridad de una web (versión de PHP, plugins, código propio, contraseñas…).


Resumen

Concepto Descripción
PHP PHP: Hypertext Preprocessor, lenguaje interpretado del lado del servidor
Lado del servidor El código se ejecuta en el servidor; el navegador solo recibe el resultado (HTML, JSON…)
Petición HTTP Navegador → servidor web → intérprete PHP → (base de datos) → HTML → navegador
Share nothing Cada petición empieza de cero; el estado se guarda en sesiones, cookies o BD
SAPI Forma de conectar PHP: mod_php, PHP-FPM, CLI, servidor integrado
OPcache / JIT Mecanismos que hacen que PHP moderno sea rápido
Historia PHP/FI (1995) → PHP 5 (2004, POO) → PHP 7 (2015, rendimiento) → PHP 8.x (2020+, PHP moderno)
PHP 8.5 Operador pipe \|>, clone with, extensión URI, #[\NoDiscard], array_first()/array_last()
Ciclo de soporte 2 años de soporte activo + 2 años solo de seguridad
Ecosistema WordPress, Drupal, Moodle, Laravel, Symfony, Composer
<?php Etiqueta de apertura de código PHP
echo Envía texto a la salida
<?= ... ?> Atajo para imprimir un valor dentro de HTML
declare(strict_types=1); Activa el tipado estricto en el fichero