Tutorial de PHP con ejemplos ejecutables
Un tutorial y referencia gratuitos de PHP 8: arrays, foreach, funciones de cadenas, fechas, formularios, clases y errores. Cada ejemplo se ejecuta en la página, y los que imprimen HTML muestran la página con formularios que puedes enviar.
Inicia un recorrido guiado de PHPPrimeros pasos
- ¿Qué es PHP?PHP es un lenguaje de scripting del lado del servidor: un archivo PHP se ejecuta en el servidor web y envía al navegador el HTML que genera. Mueve WordPress, Laravel y una gran parte de la web, y también ejecuta scripts desde la línea de comandos.
- Instalar PHPInstala PHP con un solo comando: winget en Windows, Homebrew en macOS, apt o dnf en Linux. Después ejecuta php -v en una terminal para comprobar que funciona y qué versión tienes.
- Ejecutar PHPEjecuta un archivo PHP desde la terminal con php index.php, o sirve una carpeta en el navegador con el servidor integrado de PHP: php -S localhost:8000. Ninguna de las dos opciones necesita Apache ni XAMPP.
- echo y printecho imprime una o varias cadenas: echo "Hello, $name"; o echo $a, $b;. Es la forma habitual de enviar texto o HTML a la página. print hace lo mismo con un solo valor y devuelve 1; <?= $x ?> es la forma corta dentro de HTML.
- Mostrar erroresPara mostrar todos los errores de PHP, pon ini_set('display_errors', '1'); y error_reporting(E_ALL); al principio del script, o configura display_errors = On y error_reporting = E_ALL en php.ini. En producción, registra los errores en un log en lugar de mostrarlos.
- PHP vs PythonPHP está hecho para la web: un archivo se ejecuta en cada petición e imprime una página, y mueve WordPress y Laravel. Python es un lenguaje de propósito general que también sirve para la web (Django, Flask) y domina la ciencia de datos, la automatización y el machine learning.
- PHP vs JavaScriptPHP se ejecuta en el servidor y envía HTML terminado al navegador. JavaScript se ejecuta en el navegador, donde cambia la página después de cargarla, y en el servidor con Node.js. La mayoría de los sitios usan los dos: PHP para generar páginas y APIs, JavaScript para la interacción.
Conceptos básicos
- VariablesUna variable en PHP empieza por $ y se crea al asignarle un valor: $name = "Ada";. No hay palabra clave de declaración ni tipo fijo. Las funciones no ven las variables de fuera salvo que se las pases, uses global o las captures; static conserva un valor entre llamadas.
- Tipos de datosPHP tiene diez tipos: cuatro escalares (int, float, string, bool), cuatro compuestos (array, object, callable, iterable) y dos especiales (null, resource). var_dump($x) muestra el tipo y el valor, y gettype($x) devuelve el nombre del tipo.
- CadenasUne cadenas en PHP con el operador punto ("Hello, " . $name) o pon las variables directamente entre comillas dobles ("Hello, $name"). Las comillas simples imprimen el texto tal cual. Aprende la concatenación, .=, la interpolación de arrays y objetos y el cambio de mayúsculas con strtoupper, strtolower, ucfirst y ucwords.
- Heredoc y nowdocUn heredoc en PHP es una cadena de varias líneas que empieza con <<<EOT y termina con EOT; sustituye variables igual que una cadena entre comillas dobles. Un nowdoc, <<<'EOT', conserva el texto tal cual. Aprende la sintaxis, las reglas de indentación, la interpolación de arrays y objetos y las plantillas HTML.
- OperadoresLos operadores de PHP trabajan con valores: +, -, *, /, %, ** para aritmética, =, +=, .=, ??= para asignar, &&, ||, ! y xor para lógica, . para unir cadenas, ==, ===, <=> para comparar y ++, -- para incrementar. Aprende cada grupo con ejemplos ejecutables, más la trampa de precedencia de and frente a &&.
- Operadores de comparaciónPHP compara valores con == (igual tras la conversión de tipos), === (mismo valor y mismo tipo), != y !==, < > <= >= y el operador nave espacial <=>. Aprende cuándo == convierte tipos, qué cambió en PHP 8 y mira todas las comparaciones flexibles y estrictas en una tabla.
- Operador ternarioEl operador ternario de PHP es un if/else en una línea: $result = $condition ? 'yes' : 'no';. Aprende el ternario corto ?: (operador Elvis), en qué se diferencia de ??, por qué los ternarios anidados necesitan paréntesis desde PHP 8 y cuándo match es la opción más limpia.
- Fusión de null ??El operador de fusión de null de PHP devuelve su lado izquierdo salvo que sea null o no esté definido: $name = $_GET['name'] ?? 'Guest';. Nunca avisa de una variable o una clave de array que falta. Aprende las cadenas de ??, la asignación ??=, ?? frente a ?: y el operador nullsafe ?->.
- Conversión de tiposConvierte una cadena en entero en PHP con (int) $str o intval($str); (int) "42" es 42 y (int) "12abc" es 12. Aprende los casts a int, float, bool, string y array, las cadenas numéricas, intval con base, settype y cómo validar la entrada en lugar de obtener 0 en silencio.
- ConstantesUna constante en PHP es un nombre para un valor que no puede cambiar: const MAX_USERS = 100; o define('MAX_USERS', 100);. Aprende define frente a const, las constantes array, las constantes de clase con self::, cómo comprobarlas con defined() y las constantes mágicas __LINE__, __FILE__, __DIR__ y __CLASS__.
- isset()isset($var) devuelve true cuando una variable existe y no es null, y false en caso contrario, sin ningún warning. También comprueba claves de array y propiedades de objetos: isset($user['email']). Aprende isset con varias variables, claves anidadas, isset frente a empty, isset frente a array_key_exists y cómo comprobar el envío de formularios.
- empty()empty($var) devuelve true cuando una variable falta o es falsy: null, false, 0, 0.0, "", "0" o []. Nunca avisa de variables o claves no definidas. Aprende por qué "0" cuenta como vacío, cómo comprobar exactamente una cadena o un array vacíos, empty frente a isset y la validación de formularios.
- Matemáticas y redondeoround($x, 2) redondea a dos decimales, floor() siempre redondea hacia abajo y ceil() siempre hacia arriba. Además, intdiv(), el operador %, ** para potencias, abs(), max(), min() y random_int() para números aleatorios.
Control de flujo
- if, elseif, elseif (condition) { ... } ejecuta un bloque solo cuando la condición es verdadera, elseif comprueba la siguiente condición y else se ejecuta cuando no coincidió ninguna. Incluye elseif frente a else if, && y ||, valores truthy y la sintaxis if: endif; para plantillas HTML.
- Sentencia switchswitch ($value) compara un valor con una lista de etiquetas case y ejecuta el código desde la primera coincidencia hasta un break. Incluye varios case, fallthrough, default, switch(true) y por qué switch usa la comparación flexible ==.
- Expresión matchmatch ($x) { 1, 2 => 'low', default => 'other' } compara un valor con el === estricto, devuelve el resultado de la primera rama que coincide y lanza un UnhandledMatchError cuando nada coincide. Incluye match frente a switch, match(true) y match con enums.
- Bucle forfor ($i = 0; $i < 10; $i++) { ... } ejecuta un bloque un número fijo de veces: valor inicial, condición comprobada antes de cada vuelta y un paso. Incluye recorrer un array por índice, contar hacia atrás, bucles anidados, break y continue.
- Bucle whilewhile (condition) { ... } repite un bloque mientras la condición sea verdadera, comprobándola antes de cada vuelta. do { ... } while (condition); la comprueba después, así que siempre se ejecuta al menos una vez. Incluye while (true) con break, leer un archivo línea a línea y cómo evitar bucles infinitos.
- Bucle foreachforeach ($array as $value) visita cada elemento de un array, y foreach ($array as $key => $value) te da también la clave. Incluye cómo obtener el índice, cambiar valores por referencia y la trampa de unset(), break y continue, arrays anidados, list() en foreach y generar HTML.
Arrays
- ArraysUn array en PHP es una lista ordenada de valores, cada uno guardado bajo una clave: $fruits = ['apple', 'banana']; se lee como $fruits[0]. Aprende a crear arrays, leer y cambiar elementos, recorrerlos, imprimirlos y qué función de array usar en cada caso.
- Arrays asociativosUn array asociativo en PHP guarda valores bajo claves con nombre: $user = ['name' => 'Ada', 'age' => 36]; se lee como $user['name']. Aprende a añadir, cambiar y eliminar pares, recorrer claves y valores, obtener todas las claves o valores, comprobar una clave y ordenar por clave o por valor.
- Arrays multidimensionalesUn array multidimensional en PHP es un array cuyos elementos son arrays, y se lee con un par de corchetes por nivel: $grid[1][2] o $users[0]['name']. Aprende a crear arrays anidados, leer y cambiar valores profundos, recorrerlos con foreach anidados, generar una tabla HTML, extraer una columna y ordenar filas.
- array_push()array_push($arr, $value) añade uno o varios valores al final de un array; $arr[] = $value hace lo mismo con un solo valor y es más rápido. Aprende a añadir al final, al principio o en medio de un array, añadir una clave con su valor y evitar el bug clásico del valor de retorno.
- count()count($arr) devuelve el número de elementos de un array de PHP, así que count(['a', 'b', 'c']) es 3. Aprende a contar arrays anidados con COUNT_RECURSIVE, qué relación tiene sizeof() con count(), cómo contar valores que cumplen una condición y por qué count(null) lanza un TypeError desde PHP 8.
- in_array()in_array($needle, $haystack) devuelve true cuando el valor está en el array. Pasa true como tercer argumento para una comprobación estricta, in_array('1', $ids, true), de modo que también tenga que coincidir el tipo. Aprende la opción estricta, búsquedas sin distinguir mayúsculas, comprobar varios valores, arrays anidados y la alternativa rápida con isset.
- array_search()array_search($value, $array) devuelve la clave del primer elemento igual a $value, o false si no hay ninguno. Como la clave puede ser 0, comprueba siempre el resultado con !== false. Aprende las búsquedas estrictas, a encontrar todas las coincidencias, a buscar en un array multidimensional con array_column y a buscar sin distinguir mayúsculas.
- array_key_exists()array_key_exists('key', $array) devuelve true cuando el array tiene esa clave, aunque su valor sea null. isset($array['key']) es más rápido pero devuelve false con un valor null. Aprende la diferencia, key_exists(), las claves anidadas, cómo comprobar varias claves y por qué los objetos necesitan property_exists().
- array_merge()array_merge($a, $b) une arrays en uno: los valores con claves numéricas se añaden al final y se renumeran, y con claves de texto gana el array posterior. Aprende en qué se diferencia array_merge del operador + y de la sintaxis spread [...$a, ...$b], cómo unir una lista de arrays y cuándo encajan mejor array_merge_recursive o array_replace.
- array_map()array_map($callback, $array) llama al callback con cada elemento y devuelve un array nuevo con los resultados. Aprende las funciones flecha, las claves, cómo mapear varios arrays a la vez y cuándo encaja mejor array_walk o foreach.
- array_filter()array_filter($array, $callback) conserva los elementos para los que el callback devuelve true. Aprende a quitar valores vacíos, filtrar por clave con ARRAY_FILTER_USE_KEY, reindexar el resultado con array_values y sumar con array_reduce.
- Ordenar arrayssort($array) ordena una lista en el sitio, asort y ksort ordenan un array asociativo por valor o por clave, y usort ordena con tu propia comparación. Aprende todas, a ordenar un array multidimensional por una columna y a evitar el error clásico $sorted = sort($arr).
- Eliminar de un arrayunset($array[$key]) elimina un elemento por clave, array_splice elimina por posición y renumera, y array_diff elimina por valor. Aprende cada una, cómo reindexar después y la trampa de array_search que borra el elemento equivocado.
- array_slice()array_slice($array, $offset, $length) devuelve una copia de una parte de un array sin cambiar el original. Aprende los desplazamientos negativos para los últimos elementos, preserve_keys, la paginación de una lista y en qué se diferencia de array_splice.
- array_unique()array_unique($array) elimina los valores duplicados y conserva la primera aparición de cada uno, con su clave original. Aprende a reindexar el resultado, quitar duplicados sin distinguir mayúsculas, dejar únicos los elementos de un array multidimensional y contar o encontrar los duplicados.
- array_column()array_column($rows, 'email') devuelve el campo email de cada fila como un array plano. Aprende el argumento de clave de índice, a reindexar filas por id, a usarlo con objetos y a encontrar una fila con array_search.
- Desestructuración y list()[$a, $b] = $array asigna los dos primeros elementos a $a y $b en una línea, y ['name' => $name] = $user hace lo mismo por clave. list() es la forma antigua. Incluye saltarse elementos, intercambiar variables, devolver varios valores, desestructurar en foreach y el operador spread ....
Cadenas
- explode()explode(',', $string) divide una cadena en cada coma y devuelve los trozos como array. Aprende el parámetro limit, cómo dividir por saltos de línea, recortar los trozos y cuándo es mejor str_split o preg_split.
- implode()implode(', ', $array) une los valores de un array en una cadena con un separador entre ellos. Aprende implode con claves, arrays asociativos, cómo generar listas HTML y la diferencia entre implode y join.
- str_replace()str_replace($search, $replace, $subject) sustituye cada aparición de $search por $replace. Aprende a usar arrays de búsqueda y reemplazo, contar los reemplazos, str_ireplace sin distinguir mayúsculas y cómo reemplazar solo la primera aparición.
- substr()substr($string, $offset, $length) devuelve una parte de una cadena. Aprende los desplazamientos negativos, a obtener los primeros o los últimos caracteres, mb_substr para japonés y otro texto UTF-8, substr_count y a recortar texto con puntos suspensivos.
- strpos()strpos($haystack, $needle) devuelve la posición de la primera aparición de $needle, o false si no la encuentra. Aprende la comprobación !== false, stripos sin distinguir mayúsculas, la última coincidencia con strrpos y cómo encontrar todas las apariciones.
- str_contains()str_contains($haystack, $needle) devuelve true si $needle aparece en cualquier lugar de $haystack. Aprende la versión sin distinguir mayúsculas, str_starts_with y str_ends_with, cómo comprobar varias palabras y la versión con strpos para PHP 7.
- trim()trim($string) elimina espacios, tabuladores y saltos de línea de los dos extremos de una cadena; ltrim() y rtrim() limpian un solo lado. Aprende a recortar caracteres concretos, el espacio japonés de ancho completo y cada valor de un array.
- strlen()strlen($string) devuelve la longitud de una cadena en bytes; mb_strlen($string) la devuelve en caracteres. Aprende por qué el texto japonés y los emojis dan respuestas distintas, cómo comprobar si una cadena está vacía y cómo validar la longitud de la entrada.
- sprintf()sprintf() construye una cadena a partir de un formato y unos valores: sprintf('%05.2f', 3.14159) devuelve "03.14". Aprende %s, %d y %f, el relleno con ceros, los decimales fijos, la alineación, la numeración de argumentos, printf y vsprintf.
- number_format()number_format(1234567.891, 2) devuelve "1,234,567.89": redondea a los decimales indicados y añade un separador de miles. Aprende los cuatro parámetros, los formatos europeo y japonés, cómo redondea y por qué el resultado es una cadena.
- Saltos de líneaPara imprimir un salto de línea en PHP, escribe "\n" entre comillas dobles o usa PHP_EOL. En una página web un salto de línea no se ve, así que usa <br> o nl2br(). Aprende la diferencia, por qué '\n' entre comillas simples no funciona y cómo dividir o quitar saltos de línea.
- preg_match()preg_match($pattern, $subject, $matches) comprueba una cadena contra una expresión regular y devuelve 1 si coincide y 0 si no. Aprende los grupos de captura, los grupos con nombre, preg_match_all, los anclajes, patrones de validación y el modificador u para UTF-8 y texto japonés.
- preg_replace()preg_replace($pattern, $replacement, $subject) sustituye cada coincidencia de una expresión regular: preg_replace('/\s+/', ' ', $text) reduce los espacios en blanco. Aprende las referencias como $1, preg_replace_callback, cómo quitar caracteres no alfanuméricos, los límites y los recuentos.
Funciones
- FuncionesDefine una función en PHP con function name($param) { return $value; }. Aprende los valores de retorno, los parámetros por defecto, los argumentos con nombre, el paso por referencia, las declaraciones de tipo con strict_types, los tipos nullable y unión y los variádicos ...$args.
- Funciones flechaUna función flecha es una función anónima de una sola expresión que se escribe fn($x) => $x * 2. Usa automáticamente las variables de fuera, por valor, sin use. Aprende la sintaxis, cómo funciona la captura, los tipos, los callbacks para array_map y usort, y cuándo usar en su lugar un closure completo.
- Funciones anónimasUna función anónima (closure) es una función sin nombre guardada en una variable: $greet = function ($name) { return "Hi $name"; };. Aprende la palabra clave use, la captura por referencia, los callables, la sintaxis de callable de primera clase strlen(...) y los closures dentro de clases.
- GeneradoresUn generador es una función que usa yield para devolver valores de uno en uno, así que foreach puede recorrer un millón de elementos sin construir un array. Aprende yield, las claves, el ahorro de memoria, las secuencias infinitas, yield from, send() y getReturn().
Clases y objetos
- Clases y objetosUna clase de PHP es un plano que se declara con `class Name { }`, y `new Name()` crea un objeto a partir de ella. Aprende las propiedades, los métodos, `$this`, public/private/protected, las propiedades tipadas y readonly, `__toString` y por qué asignar un objeto no lo copia.
- ConstructoresUn constructor de PHP es el método `__construct()`, que se ejecuta automáticamente cuando escribes `new ClassName(...)`. Aprende la promoción de propiedades en el constructor, los argumentos por defecto y con nombre, la validación, `parent::__construct()` y cómo simular varios constructores con métodos factoría estáticos.
- HerenciaEn PHP una clase hereda de otra con `class Dog extends Animal`: recibe las propiedades y los métodos públicos y protegidos del padre, puede sobrescribirlos y aun así llamar al original con `parent::method()`. Aprende la sobrescritura, protected, final, instanceof y la trampa de los métodos privados.
- InterfacesUna interfaz de PHP enumera los métodos que una clase promete tener: `interface Shape { public function area(): float; }`, y entonces `class Circle implements Shape` debe definir `area()`. Aprende las declaraciones de tipo con interfaces, a implementar varias interfaces, las constantes de interfaz, extender interfaces, interfaces nativas como Countable y la interfaz frente a la clase abstracta.
- Clases abstractasUna clase abstracta de PHP se declara `abstract class Name` y no se puede instanciar: existe para ser extendida. Puede contener propiedades, un constructor y métodos terminados, además de métodos `abstract` sin cuerpo que cada clase hija debe implementar.
- TraitsUn trait de PHP es un bloque reutilizable de métodos y propiedades que copias en una clase con `use TraitName;`. Aprende a usar varios traits, resolver conflictos de nombres con `insteadof` y `as`, los miembros abstractos y estáticos de un trait, qué método gana y la diferencia entre trait, interfaz y clase abstracta.
- EnumsUn enum de PHP (8.1+) es un tipo con una lista fija de valores: `enum Status: string { case Active = 'active'; }`. Aprende los enums puros y respaldados, `->value` y `->name`, cómo convertir con `from()` y `tryFrom()`, listar los casos con `cases()`, los métodos, las constantes, las interfaces y los enums en `match`.
- Métodos estáticosUn método o una propiedad `static` pertenece a la clase, no a un objeto: lo llamas con `ClassName::method()` y lo lees con `ClassName::$count`, sin necesidad de `new`. Aprende `self::` frente a `static::` (late static binding), `new static`, las variables estáticas dentro de funciones y cuándo static es la herramienta equivocada.
- NamespacesUn namespace de PHP agrupa clases, funciones y constantes bajo un prefijo: `namespace App\Models;` al principio de un archivo, y luego `use App\Models\User;` en otro sitio para referirte a la clase por su nombre corto. Aprende los nombres completamente cualificados, los alias con `use ... as`, `use function`, la barra invertida inicial para las clases globales y el autoloading PSR-4.
Errores y excepciones
- try catchEn PHP, el código que puede fallar va en un bloque `try { }`, y `catch (Exception $e) { }` se ejecuta si lanza algo, con el motivo en `$e->getMessage()`. Aprende a capturar varios tipos de excepción, `finally`, por qué `catch (Exception)` no captura `TypeError` ni `DivisionByZeroError` (captura `Throwable`), a relanzar y a usar un manejador global.
- ExcepcionesEn PHP lanzas una excepción con `throw new Exception('message');`, y quien llama la lee con `$e->getMessage()` en un bloque `catch`. Aprende las clases de excepción nativas, a escribir excepciones propias, `getCode()`, `getLine()` y `getPrevious()`, `throw` como expresión y los errores que lanza el propio PHP, como `ValueError` y `TypeError`.
Datos, archivos y la web
- json_encode()json_encode($value) convierte un array, un objeto o un escalar de PHP en una cadena JSON. Los arrays asociativos se convierten en objetos JSON, las listas en arrays JSON, y opciones como JSON_PRETTY_PRINT y JSON_UNESCAPED_UNICODE controlan la salida.
- json_decode()json_decode($json, true) convierte una cadena JSON en un array asociativo de PHP; sin true obtienes objetos stdClass. Aprende los valores anidados, el manejo de errores con JSON_THROW_ON_ERROR, json_validate() y por qué json_decode devuelve null.
- date()date('Y-m-d') devuelve la fecha de hoy como cadena, y date('Y-m-d', $timestamp) formatea cualquier timestamp Unix. Aprende time(), mktime(), strtotime(), DateTimeImmutable, sumar días, la diferencia entre dos fechas y las zonas horarias, con ejemplos que puedes ejecutar.
- Formato de fechaUn formato de fecha de PHP es una cadena de letras como 'Y-m-d H:i:s', donde Y es el año con 4 dígitos, m el mes, d el día, H la hora, i los minutos y s los segundos. Aquí tienes todos los caracteres de formato con un ejemplo, además del escape, ISO 8601, las fechas en japonés y cómo convertir un formato en otro.
- file_get_contents()file_get_contents('notes.txt') lee un archivo entero y lo devuelve como una cadena, o false si no puede. Su pareja file_put_contents() escribe una cadena en un archivo, y file() devuelve las líneas como array.
- fopen()fopen('data.txt', 'r') abre un archivo y devuelve un manejador, o false si falla. Lee del manejador con fgets() o fread(), escribe con fwrite() y ciérralo con fclose(). El modo ('r', 'w', 'a', 'x', 'c' y sus formas con +) decide qué puedes hacer.
- include y requireinclude 'header.php'; ejecuta otro archivo PHP en ese punto, como si su código estuviera pegado ahí. require hace lo mismo pero detiene el script con un error fatal cuando falta el archivo, mientras que include solo avisa y continúa. include_once y require_once cargan un archivo solo la primera vez.
- FormulariosUn formulario PHP se envía a sí mismo con <form method="post">, y el script lee los campos de $_POST['name'] cuando $_SERVER['REQUEST_METHOD'] es 'POST'. Aprende la validación, los mensajes de error junto a los campos, cómo conservar los valores escritos, las casillas y los select, y el escapado de la salida.
- $_GET y $_POST$_GET contiene la query string de la URL (?page=2 da $_GET['page']) y $_POST contiene los campos de un formulario enviado con method="post". Aprende a leer los dos de forma segura, construir enlaces con http_build_query, comprobar $_SERVER['REQUEST_METHOD'] y elegir entre GET y POST.
- htmlspecialchars()htmlspecialchars($text) convierte en entidades los cinco caracteres que significan algo en HTML (& < > " '), de modo que la entrada del usuario se muestra como texto en lugar de ejecutarse como marcado. Aprende ENT_QUOTES, el escapado de atributos, la doble codificación, htmlentities y strip_tags.
- Sesiones y cookiesLlama a session_start() al principio de cada página y guarda los valores en $_SESSION['key']; PHP los conserva en el servidor y recuerda al visitante mediante una cookie. setcookie('name', 'value', $options) guarda un valor pequeño en el navegador, que se vuelve a leer en $_COOKIE. Aprende el inicio y el cierre de sesión, los mensajes flash, las opciones de las cookies y los ajustes de seguridad.
- password_hash()Haz el hash de una contraseña con password_hash($password, PASSWORD_DEFAULT), guarda el resultado de 60 caracteres y comprueba un inicio de sesión con password_verify($password, $hash). Aprende por qué el hash cambia cada vez, el coste, password_needs_rehash, Argon2id y por qué md5 y sha1 no sirven para contraseñas.
- filter_var()filter_var($value, FILTER_VALIDATE_EMAIL) devuelve el valor si es válido y false si no; FILTER_VALIDATE_INT, FILTER_VALIDATE_URL, FILTER_VALIDATE_BOOL y FILTER_VALIDATE_IP funcionan igual. Aprende las opciones (min_range, default), las flags, los filtros de saneamiento y la trampa de false frente a 0.
- PDOPDO es la capa de base de datos de PHP: conecta con new PDO('mysql:host=localhost;dbname=shop;charset=utf8mb4', $user, $pass) y ejecuta cada consulta con valores mediante prepare() y execute([$value]). Aprende la conexión, las sentencias preparadas, cómo obtener filas, los inserts, las transacciones y WHERE IN.
- ComposerComposer es el gestor de paquetes de PHP: composer require vendor/package descarga una librería en vendor/, la registra en composer.json, y require 'vendor/autoload.php' la carga. Aprende a instalar Composer, composer.json, las restricciones de versión, install frente a update y el autoloading PSR-4 de tus propias clases.
Depuración y práctica
- var_dump() y print_r()print_r($array) imprime un array de forma legible, var_dump($value) muestra además cada tipo y longitud, y var_export imprime código PHP válido. Aprende cuándo usar cada uno, cómo obtener print_r como cadena y cómo mostrarlo bien formateado en HTML con <pre>.
- Preguntas de entrevista24 preguntas de entrevista de PHP con respuestas cortas y correctas para PHP 8, desde == frente a === e isset frente a empty hasta las referencias en foreach, self frente a static, los generadores, la inyección SQL y el hash de contraseñas. La mayoría de las respuestas tienen código que puedes ejecutar y cambiar.