🐘 2.2 · PHP básico: tu primer lenguaje de backend

⏱ 6h 00min ⚡ 100 XP 🏅 Practicante 📖 Backend FullStack
"PHP es feo, desordenado y veterano. También mueve el 77% de la web. Aprende a usarlo bien."

🎯 Objetivo del tema

Al terminar este tema serás capaz de: Al terminar este tema serás capaz de escribir scripts PHP básicos: declarar variables, usar tipos de datos, controlar el flujo con condicionales y bucles, crear funciones, y organizar tu código en archivos. PHP es el lenguaje de backend más usado del mundo (77% de la web según W3Techs), y es la base del programa IPN que estás cursando. Aprendiéndolo bien, las bases para cualquier otro backend vienen gratis.
🎬
Video del instructor

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.

1. Qué es PHP y dónde corre

El motor de la web dinámica: servidor, intérprete, y ciclo petición-respuesta.

2. Sintaxis básica: variables, tipos, echo

Cómo se ve el código PHP y cómo se mezcla con HTML.

3. Operadores y expresiones

Aritméticos, comparación, lógicos, concatenación: cómo manipular datos.

4. Estructuras de control: if, switch, while, for

Cómo tomar decisiones y repetir acciones en tu código.

5. Funciones y alcance (scope)

Crear bloques de código reutilizables con parámetros y return.

6. Arreglos: la superestructura de PHP

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.

📷 Imagen referencial: Ciclo de una petición PHP: navegador → servidor web (Apache/Nginx) → intérprete PHP → genera HTML → respuesta al navegador.

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

⭐ Dato curioso: PHP nació como 'Personal Home Page'. Hoy significa 'PHP: Hypertext Preprocessor' (el acrónimo se contiene a sí mismo, como 'GNU'). Es uno de los pocos lenguajes diseñados ESPECÍFICAMENTE para la web, y eso se nota en su sintaxis.
🎬
Video del instructor

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.

TipoEjemploDescripción
string'Hola' o "Hola $nombre"Texto. Comillas simples o dobles (con interpolación).
int42, -10, 0Números enteros.
float3.14, -0.5Números con decimales.
booltrue, falseVerdadero o falso.
array[1, 2, 3] o ['clave' => 'valor']Colección de valores.
nullnullAusencia 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

⭐ Tipado dinámico vs estricto: PHP es de tipado DINÁMICO: no declaras el tipo de la variable, PHP lo infiere. Esto es flexible pero propenso a bugs. En PHP 7+ puedes (y debes) usar type hints en funciones para mayor seguridad: function suma(int $a, int $b): int { return $a + $b; }
🎬
Video del instructor

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 !==.

OperadorSignificadoEjemplo
+ - * / %Aritméticos10 % 3 = 1 (resto)
== ===Igualdad (=== también compara tipo)5 === '5' es false
!= !==Desigualdad5 !== '5' es true
> < >= <=Comparación10 > 5 es true
&& y ||AND y OR lógicostrue && false es false
.Concatenación de strings'Hola' . ' mundo'
.=Concatenar y asignar$texto .= ' más'
⭐ === siempre, == nunca: Regla de oro: usa SIEMPRE === (estricto) en vez de == (flexible). Con ==, 0 == 'hola' es true (PHP intenta convertir tipos). Con ===, 0 === 'hola' es false. El == te va a dar bugs IMPOSIBLES de detectar. === te los previene.
🎬
Video del instructor

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

⭐ switch + break: Olvidar el break en switch es uno de los bugs más comunes en PHP. Sin break, la ejecución CONTINÚA al siguiente case, ejecutando código no deseado. Si quieres múltiples cases con el mismo código, puedes omitir el break intencionalmente, pero CUIDADO: es una fuente clásica de bugs.
🎬
Video del instructor

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

⭐ PHP scope vs JS scope: En PHP, las variables dentro de funciones son SIEMPRE locales (a menos que uses 'global' o '$GLOBALS'). Esto es DIFERENTE de JavaScript, donde las funciones pueden acceder a variables del scope exterior. Es una de las confusiones más comunes para juniors que vienen de JS.
🎬
Video del instructor

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

⭐ [] en vez de array(): En PHP moderno (7.4+), se usa mucho la sintaxis corta de arrays con [] en vez de array(). Ambas funcionan, pero [] es más conciso y es el estándar actual. Verás mucho código viejo con array(), pero no lo uses en código nuevo.
🎬
Video del instructor

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

  1. Instala XAMPP o usa el PHP embebido: php -S localhost:8000.
  2. Crea validaciones.php con un formulario HTML que apunte a sí mismo.
  3. Recoge los datos con $_POST.
  4. Valida: nombre no vacío, email válido con filter_var, edad entre 18 y 120.
  5. Si hay errores, muestra mensajes específicos. Si todo está bien, muestra 'Registro exitoso'.
  6. Prueba con 3 casos: datos válidos, email inválido, edad fuera de rango.
  7. 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é.'
  8. Aplica las 2 mejoras que entiendas. Anota las que NO aplicaste y por qué.
  9. 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

Error 1: Usar == en vez de === (comparación flexible vs estricta).
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.
Error 2: Olvidar el $ delante del nombre de variable.
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.
Error 3: Usar variables globales dentro de funciones sin 'global'.
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.
Error 4: Olvidar el break en switch.
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.
Error 5: Concatenar HTML con echo en vez de separar lógica y presentación.
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

  1. Instala XAMPP (o usa el servidor embebido: php -S localhost:8000).
  2. Crea una carpeta 'lab-calculadora-php' y un archivo index.php.
  3. Crea un formulario HTML que pida: monto de la cuenta, porcentaje de propina (10, 15, 20), número de personas.
  4. Al enviar, el mismo archivo procesa: $_POST, valida que sean numéricos y positivos.
  5. Calcula: propina = monto * porcentaje / 100; total = monto + propina; por_persona = total / personas.
  6. Muestra los resultados con formato: 'Propina: $X.XX | Total: $X.XX | Por persona: $X.XX'.
  7. Si el usuario pone datos inválidos, muestra mensajes de error específicos.
  8. Estiliza con CSS (que cargue desde un archivo externo estilos.css).
  9. Prueba con: monto $500, 15%, 4 personas. ¿El cálculo es correcto?
  10. Prueba con entradas inválidas: letras, negativos, división por cero.
  11. 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.

📓 Tu cuaderno: Anota pseudocódigo, diagramas, errores que encontraste y respuestas a "explica sin código". La escritura manual refuerza tu razonamiento. Tu profesor puede pedirte que subas fotos de páginas específicas.