Las entrevistas de PHP cubren semántica del lenguaje, OOP, Laravel o Symfony, MySQL, y fundamentos de seguridad web. Aquí están las preguntas más comunes con respuestas modelo. Junior: teoría básica, definiciones y casos prácticos simples.
1
¿Cuál es la diferencia entre `==` y `===`?
Respuesta
== compara después de type juggling, === compara valor y tipo. PHP 8 hizo el juggling mucho más sensato — 0 == "foo" ahora es false — pero la regla se mantiene: usa === a menos que tengas una razón para no hacerlo, porque la tabla de comparación es algo que nadie debería tener que memorizar.
2
¿Cuál es la diferencia entre una interfaz, una clase abstracta y un trait?
Respuesta
Una interfaz declara qué puede hacer una clase y no lleva implementación. Una clase abstracta puede tener estado e implementación parcial, y una clase extiende solo una. Un trait es código inyectado en una clase — la respuesta de PHP a no tener herencia múltiple. Los traits son para implementación compartida, las interfaces para contrato compartido.
3
¿Qué restringen realmente `public`, `protected` y `private`?
Respuesta
public es alcanzable desde cualquier lugar, protected desde la clase y sus subclases, private solo desde la clase que lo declara. private es más estricto de lo que la gente espera — una subclase no puede verlo. Por defecto usa private y amplía cuando algo externo genuinamente necesita acceso.
4
¿Cuál es la diferencia entre `include` y `require`?
Respuesta
Ambos traen un archivo; require lanza un error fatal si falta, include solo un warning y continúa. Las variantes _once saltan un archivo ya cargado. En código moderno te encuentras con estos raramente, porque el autoloader de Composer resuelve clases por namespace y nunca escribes la ruta.
5
¿Qué es Composer y para qué sirve `composer.lock`?
Respuesta
Composer resuelve e instala dependencias. composer.json dice lo que quieres, composer.lock registra exactamente lo que se resolvió — por eso el lock file se commitea y por eso composer install en el servidor reproduce el mismo árbol en vez de elegir versiones más nuevas.
6
¿Qué es el type juggling y dónde sigue mordiendo?
Respuesta
PHP convirtiendo tipos para compararlos u operar sobre ellos. Sigue mordiendo cuando un string de un formulario llega donde se esperaba un número, y en comparaciones laxas dentro de in_array o switch, que usan == por defecto. Declarar strict_types=1 al inicio de un archivo convierte la coerción silenciosa en un error.
7
¿Qué son las superglobales y por qué no deberías leerlas directamente?
Respuesta
$_GET, $_POST, $_SERVER, $_SESSION y el resto guardan datos del request. Leerlas directamente esparce input no validado por el código y hace que todo lo que las toca sea imposible de testear, ya que no hay un request que construir. El objeto request de un framework las envuelve, por eso lo usas.