Test de PHP: 24 preguntas para comprobar lo que sabes

¿Cuánto PHP sabes de verdad? Estas 24 preguntas repasan las 8 lecciones de nuestro curso de PHP: el servidor integrado, tipos y strict_types, comparaciones, match, arrays, texto UTF-8, closures, excepciones, clases y enums, Composer, la web segura y el proyecto final. Elige una respuesta en cada pregunta y pulsa Corregir al final: verás tu nota, los aciertos por lección y la explicación de cada respuesta.

No hace falta registrarse y nada se envía a ningún sitio: el test se corrige en tu propio navegador. Todas las respuestas con código se comprobaron compilando y ejecutando el código con PHP 8.5.12.

Pregunta 1Lección 1: Primeros pasos

¿Qué hace php -S localhost:8000 en una carpeta con archivos PHP?

Pregunta 2Lección 1: Primeros pasos

¿Qué escribe este programa?

<?php
$nombre = 'Ana';
echo 'Hola, $nombre\n';
Pregunta 3Lección 1: Primeros pasos

Una página muestra el nombre del visitante con <?= $_GET['nombre'] ?>. ¿Cuál es el problema?

Pregunta 4Lección 2: Tipos y variables

¿Qué escribe este programa?

<?php
declare(strict_types=1);

var_dump(7 / 2, intdiv(7, 2));
Pregunta 5Lección 2: Tipos y variables

¿Qué escribe este programa?

<?php
var_dump('1' == '01', '1' === '01');
Pregunta 6Lección 2: Tipos y variables

¿Qué escribe este programa?

<?php
declare(strict_types=1);

function doble(int $n): int
{
    return $n * 2;
}

var_dump(doble("5"));
Pregunta 7Lección 3: Control y arrays

¿Qué escribe este programa?

<?php
$cantidad = "0";

if ($cantidad) {
    echo "hay cantidad\n";
} else {
    echo "no hay cantidad\n";
}
Pregunta 8Lección 3: Control y arrays

¿Qué hace este programa?

<?php
declare(strict_types=1);

$dia = 'Sábado';

echo match ($dia) {
    'sábado', 'domingo' => 'fin de semana',
    'lunes', 'martes' => 'laborable',
};
Pregunta 9Lección 3: Control y arrays

¿Qué escribe este programa?

<?php
$a = ['a', 'b', 'c'];
unset($a[1]);
$a[] = 'd';

echo implode(',', array_keys($a)), "\n";
Pregunta 10Lección 4: Funciones, cadenas y errores

¿Qué escribe este programa?

<?php
echo strlen('Ñandú'), ' ', mb_strlen('Ñandú'), "\n";
Pregunta 11Lección 4: Funciones, cadenas y errores

¿Qué escribe este programa?

<?php
$x = 1;
$f = function () use ($x) {
    return $x;
};
$x = 2;

echo $f(), "\n";
Pregunta 12Lección 4: Funciones, cadenas y errores

¿Qué escribe este programa?

<?php
declare(strict_types=1);

try {
    echo intdiv(1, 0);
} catch (Exception $e) {
    echo "capturado\n";
}
echo "fin\n";
Pregunta 13Lección 5: Clases y objetos

¿Qué escribe este programa?

<?php
$a = new stdClass();
$a->n = 1;
$b = $a;
$b->n = 2;

echo $a->n, "\n";
Pregunta 14Lección 5: Clases y objetos

¿Qué hace este programa?

<?php
declare(strict_types=1);

final class Factura
{
    public function __construct(public readonly float $total) {}
}

$f = new Factura(100.0);
$f->total = 0.0;
echo $f->total, "\n";
Pregunta 15Lección 5: Clases y objetos

¿Qué escribe este programa?

<?php
declare(strict_types=1);

enum Estado: string
{
    case Pendiente = 'pendiente';
    case Pagado = 'pagado';
}

var_dump(Estado::tryFrom('perdido'));
Pregunta 16Lección 6: Composer y pruebas

¿Qué archivos de Composer se suben al repositorio del proyecto?

Pregunta 17Lección 6: Composer y pruebas

Con la regla PSR-4 "App\\": "src/", ¿dónde busca el autoloader la clase App\Pagos\Tarjeta?

Pregunta 18Lección 6: Composer y pruebas

¿Qué orden se usa para instalar las dependencias en el servidor de producción?

Pregunta 19Lección 7: PHP en la web

¿Por qué una consulta preparada de PDO protege de la inyección SQL?

Pregunta 20Lección 7: PHP en la web

¿Qué escribe este programa?

<?php
declare(strict_types=1);

$h1 = password_hash('mi-clave-larga', PASSWORD_DEFAULT);
$h2 = password_hash('mi-clave-larga', PASSWORD_DEFAULT);

var_dump($h1 === $h2, password_verify('mi-clave-larga', $h2));
Pregunta 21Lección 7: PHP en la web

¿Qué consigue la opción HttpOnly en la cookie de sesión?

Pregunta 22Lección 8: Un proyecto completo

En el proyecto, ¿por qué la raíz de la web es la carpeta public/ y no la del proyecto?

Pregunta 23Lección 8: Un proyecto completo

¿Para qué se llama a session_regenerate_id(true) justo después de que el usuario inicie sesión?

Pregunta 24Lección 8: Un proyecto completo

Luis intenta completar la tarea 2, que es de Ana. ¿Qué responde la aplicación del proyecto y por qué?

Las preguntas siguen el orden del curso. Si fallas alguna, el enlace de su explicación te lleva a la lección donde se explica con ejemplos.