🎯 Objetivo del tema
El administrador aún no ha insertado un video para esta sección.
🗺️ Mapa del tema
PHP nació en 1995 como un lenguaje para hacer páginas dinámicas fácilmente. Hoy, 30 años después, sigue siendo el REY del backend web: WordPress, Laravel, Symfony, Drupal, Magento, MediaWiki. La versión moderna (PHP 8.x) es un lenguaje serio, con tipos, performance comparable a Node.js, y un ecosistema maduro. Vamos a aprenderlo desde cero, sin frameworks primero.
El motor de la web dinámica: servidor, intérprete, y ciclo petición-respuesta.
Cómo se ve el código PHP y cómo se mezcla con HTML.
Aritméticos, comparación, lógicos, concatenación: cómo manipular datos.
Cómo tomar decisiones y repetir acciones en tu código.
Crear bloques de código reutilizables con parámetros y return.
Arrays indexados, asociativos y multidimensionales: el pan de cada día.
2.2.1 Qué es PHP y dónde corre
A diferencia de JavaScript, que corre en el navegador, PHP corre en el SERVIDOR. El navegador pide una página .php, el servidor la procesa, ejecuta el código PHP, genera HTML, y envía SOLO el HTML al navegador. El usuario nunca ve el código PHP: solo ve el resultado.
Tu primer archivo PHP
<?php
// archivo: hola.php
// Todo código PHP va entre <?php y ?>
$nombre = 'Ana';
echo "<h1>Hola, $nombre</h1>";
echo '<p>Bienvenida al mundo PHP</p>';
?>
<!-- Esto se mezcla con HTML normal -->
<p>Este párrafo es HTML puro, no PHP.</p>
<?php
// El servidor ejecuta esto y lo reemplaza con el resultado
echo '<p>La fecha de hoy es: ' . date('Y-m-d') . '</p>';
?>Primer archivo PHP mezclado con HTML
El administrador aún no ha insertado un video para esta sección.
2.2.2 Sintaxis básica: variables, tipos, echo
La sintaxis de PHP es directa: variables con $, echo para imprimir, y ; al final de cada sentencia. Los tipos de datos son flexibles (PHP es de tipado dinámico) pero en PHP 7+ puedes agregar tipos explícitos para más seguridad.
| Tipo | Ejemplo | Descripción |
|---|---|---|
| string | 'Hola' o "Hola $nombre" | Texto. Comillas simples o dobles (con interpolación). |
| int | 42, -10, 0 | Números enteros. |
| float | 3.14, -0.5 | Números con decimales. |
| bool | true, false | Verdadero o falso. |
| array | [1, 2, 3] o ['clave' => 'valor'] | Colección de valores. |
| null | null | Ausencia de valor. |
<?php
// Variables: siempre con $ y camelCase por convención
$nombre = 'Carlos';
$edad = 28;
$activo = true;
$precio = 99.99;
// echo: imprime en la salida
// . concatena strings
echo 'Nombre: ' . $nombre . '<br>';
echo "Edad: $edad<br>"; // comillas dobles interpolan variables
// var_dump: muestra tipo y valor (útil para debug)
var_dump($nombre); // string(7) "Carlos"
var_dump($edad); // int(28)
var_dump($activo); // bool(true)
// Constantes: no cambian
define('APP_NAME', 'Mi Aplicación');
const MAX_USUARIOS = 100;
echo APP_NAME;
?>Variables, echo y tipos en PHP
El administrador aún no ha insertado un video para esta sección.
2.2.3 Operadores y expresiones
PHP tiene todos los operadores que esperas: aritméticos, comparación, lógicos, y concatenación. Hay un detalle que confunde: = es asignación, == es comparación flexible, === es comparación ESTRICTA (compara también el tipo). La buena práctica moderna es usar SIEMPRE === y !==.
| Operador | Significado | Ejemplo |
|---|---|---|
| + - * / % | Aritméticos | 10 % 3 = 1 (resto) |
| == === | Igualdad (=== también compara tipo) | 5 === '5' es false |
| != !== | Desigualdad | 5 !== '5' es true |
| > < >= <= | Comparación | 10 > 5 es true |
| && y || | AND y OR lógicos | true && false es false |
| . | Concatenación de strings | 'Hola' . ' mundo' |
| .= | Concatenar y asignar | $texto .= ' más' |
El administrador aún no ha insertado un video para esta sección.
2.2.4 Estructuras de control: if, switch, while, for
Las mismas estructuras que ya conoces de JavaScript, con sintaxis ligeramente diferente. PHP usa { } en vez de indentación obligatoria, y los paréntesis en if son obligatorios (no como en Python).
<?php
// IF / ELSEIF / ELSE
$edad = 20;
if ($edad < 13) {
echo 'Niño';
} elseif ($edad < 18) {
echo 'Adolescente';
} else {
echo 'Adulto';
}
// SWITCH (útil para muchos casos)
$dia = 3;
switch ($dia) {
case 1: echo 'Lunes'; break;
case 2: echo 'Martes'; break;
case 3: echo 'Miércoles'; break;
default: echo 'Otro día';
}
// WHILE (repite MIENTRAS la condición sea true)
$i = 1;
while ($i <= 5) {
echo "$i ";
$i++;
}
// Imprime: 1 2 3 4 5
// FOR (repite un número CONOCIDO de veces)
for ($i = 0; $i < 5; $i++) {
echo "Iteración $i<br>";
}
// FOREACH (el más usado en PHP, para arrays)
$frutas = ['manzana', 'naranja', 'plátano'];
foreach ($frutas as $fruta) {
echo "Fruta: $fruta<br>";
}
?>Las 5 estructuras de control de PHP
El administrador aún no ha insertado un video para esta sección.
2.2.5 Funciones y alcance (scope)
Las funciones en PHP se definen con la palabra function. PHP 7+ permite type hints en parámetros y valor de retorno, lo que hace el código más seguro y autodocumentado. El scope (alcance) de las variables es importante: por defecto, las variables definidas DENTRO de una función NO son accesibles desde fuera.
<?php
// Función con type hints (PHP 7+)
function saludar(string $nombre, int $edad = 18): string {
return "Hola $nombre, tienes $edad años";
}
echo saludar('Ana'); // 'Hola Ana, tienes 18 años'
echo saludar('Luis', 25); // 'Hola Luis, tienes 25 años'
// Funciones anónimas (como las arrow de JS)
$sumar = function(int $a, int $b): int {
return $a + $b;
};
echo $sumar(3, 4); // 7
// Arrow functions (PHP 7.4+): sintaxis corta, acceso automático al scope exterior
$multiplicar = fn(int $a, int $b): int => $a * $b;
echo $multiplicar(3, 4); // 12
// Scope: variables globales vs locales
$mensaje = 'global';
function prueba() {
global $mensaje; // necesario para acceder a variable global
echo $mensaje;
}
prueba(); // imprime 'global'
?>Funciones y scope en PHP
El administrador aún no ha insertado un video para esta sección.
2.2.6 Arreglos: la superestructura de PHP
En PHP, el array es la estructura más versátil: puede ser indexado (lista), asociativo (diccionario), o multidimensional (array de arrays). El 80% de tu trabajo con datos en PHP involucra arrays. Dominarlos es dominar PHP.
<?php
// Array indexado (lista)
$numeros = [1, 2, 3, 4, 5];
$frutas = ['manzana', 'naranja', 'plátano'];
// Array asociativo (como un diccionario)
$usuario = [
'nombre' => 'Ana',
'edad' => 25,
'email' => 'ana@mail.com',
'activo' => true,
];
// Acceder a valores
echo $usuario['nombre']; // 'Ana'
echo $frutas[0]; // 'manzana'
// Array multidimensional (tabla)
$productos = [
['id' => 1, 'nombre' => 'Laptop', 'precio' => 15000],
['id' => 2, 'nombre' => 'Mouse', 'precio' => 350],
['id' => 3, 'nombre' => 'Teclado', 'precio' => 800],
];
// foreach: iterar arrays (EL MÁS USADO)
foreach ($productos as $producto) {
echo $producto['nombre'] . ': $' . $producto['precio'] . '<br>';
}
// Funciones útiles de arrays
$numeros = [3, 1, 4, 1, 5, 9, 2, 6];
echo count($numeros); // 8
sort($numeros); // ordena ascendente
print_r($numeros);
// implode: array → string
// explode: string → array
$tags = 'php,html,css,js';
$array = explode(',', $tags); // ['php', 'html', 'css', 'js']
?>Arrays en PHP: indexados, asociativos, multidimensionales
El administrador aún no ha insertado un video para esta sección.
📚 Contenido ampliado
Material adicional, referencias externas verificadas y ejemplos extendidos.
🤖 AI Mission
PHP se aprende leyendo código y escribiéndolo. La IA explica, tú programas.
Misión: Crea un script PHP que valide un formulario simple (nombre, email, edad) SIN usar frameworks. Implementa: validación de campos vacíos, validación de email con filter_var, validación de edad entre 18 y 120. Pídele a la IA que revise tu código y te sugiera 2 mejoras. Implementa solo lo que entiendas. Anota en tu cuaderno: ¿qué entendiste de scope, tipos, y funciones al escribir tu propia versión?
Pasos sugeridos
- Instala XAMPP o usa el PHP embebido: php -S localhost:8000.
- Crea validaciones.php con un formulario HTML que apunte a sí mismo.
- Recoge los datos con $_POST.
- Valida: nombre no vacío, email válido con filter_var, edad entre 18 y 120.
- Si hay errores, muestra mensajes específicos. Si todo está bien, muestra 'Registro exitoso'.
- Prueba con 3 casos: datos válidos, email inválido, edad fuera de rango.
- Pídele a la IA: 'Tengo este validador PHP. Sugiere 2 mejoras: seguridad, robustez. NO me des código, dime la técnica y por qué.'
- Aplica las 2 mejoras que entiendas. Anota las que NO aplicaste y por qué.
- Anota en tu cuaderno: 3 cosas que aprendiste escribiendo PHP que ningún tutorial te enseñó.
📓 Entregable: Capturas del formulario funcionando (válido, email inválido, edad fuera de rango), código de validaciones.php, y media página de cuaderno con tu reflexión.
🚫 Errores típicos de razonamiento
Por qué: Con ==, PHP intenta convertir tipos antes de comparar. 0 == 'hola' es true (PHP convierte 'hola' a 0). 0 == false también es true. Estos bugs son IMPOSIBLES de detectar si no lo sabes. Usa SIEMPRE === y !== para evitar conversiones implícitas. Es una de las 5 reglas del PHP moderno.
Por qué: En PHP, TODAS las variables empiezan con $. Si escribes nombre = 'Ana' sin $, PHP cree que es una constante y lanza un error. La curva de aprendizaje al principio es olvidar constantemente el $. Después de 50 líneas, lo internalizas.
Por qué: Las variables dentro de funciones son SIEMPRE locales por defecto. Si quieres usar una variable global, necesitas la palabra 'global $variable' o accederla con $GLOBALS['variable']. Esto es DIFERENTE de JavaScript. Es una confusión común para juniors que vienen de JS.
Por qué: Sin break, la ejecución CONTINÚA al siguiente case, ejecutando código no deseado. Si tienes 5 cases y olvidas 1 break, todos los siguientes se ejecutan en cascada. Es una fuente clásica de bugs. La solución moderna es usar match (PHP 8+), que es como switch pero con break automático.
Por qué: Es tentador hacer echo '<div><h1>...</h1></div>'; en medio del PHP, pero tu código se vuelve inmantenible. La buena práctica moderna: PHP solo para la lógica, HTML separado con sintaxis corta. Aprenderás esto a fondo con PHP + HTML en el Tema 2.3.
🧪 Laboratorio práctico
PHP se aprende escribiendo PHP, no leyendo sobre PHP.
Laboratorio: Calculadora de propinas en PHP
Objetivo: Crear un script PHP que calcule propinas, valide entradas, y muestre resultados formateados. Practicarás: variables, operadores, condicionales, funciones, arrays, y formateo de HTML desde PHP.
Pasos
- Instala XAMPP (o usa el servidor embebido: php -S localhost:8000).
- Crea una carpeta 'lab-calculadora-php' y un archivo index.php.
- Crea un formulario HTML que pida: monto de la cuenta, porcentaje de propina (10, 15, 20), número de personas.
- Al enviar, el mismo archivo procesa: $_POST, valida que sean numéricos y positivos.
- Calcula: propina = monto * porcentaje / 100; total = monto + propina; por_persona = total / personas.
- Muestra los resultados con formato: 'Propina: $X.XX | Total: $X.XX | Por persona: $X.XX'.
- Si el usuario pone datos inválidos, muestra mensajes de error específicos.
- Estiliza con CSS (que cargue desde un archivo externo estilos.css).
- Prueba con: monto $500, 15%, 4 personas. ¿El cálculo es correcto?
- Prueba con entradas inválidas: letras, negativos, división por cero.
- Haz commit: 'feat: calculadora de propinas en PHP con validación'.
📓 Entregable: Capturas de la calculadora funcionando (caso válido y caso con errores), código de index.php, y commit en Git.