Entrevista de PHP: ¿por dónde empezar para no fracasar?
\n\nEnviaste tu currículum, pasaste una breve llamada con RRHH y, de repente, recibes una invitación a una entrevista técnica. El corazón se acelera: «¿Y si preguntan algo que no sé?», «¿Y si olvido la sintaxis?», «¿Y si me piden escribir código en la pizarra?».
\n\nSpoiler: lo más probable es que te lo pidan. Y es normal. La entrevista de PHP no es un examen de preguntas de memoria, sino un diálogo. Pero un diálogo para el que hay que prepararse. En este artículo analizaremos qué preguntan realmente en las entrevistas para desarrolladores PHP en 2025, qué errores cometen el 90% de los candidatos y cómo dar lo mejor de ti.
\n\nLo que debes saber: estructura de preparación
\n\nPara que tu preparación para la entrevista PHP sea sistemática, divídela en tres bloques:
\n\n- \n
- Fundamentos del lenguaje: tipos de datos, arrays, funciones, manejo de archivos, sesiones. \n
- POO y arquitectura: herencia, encapsulamiento, polimorfismo, traits, interfaces. \n
- Herramientas y ecosistema: Composer, PSR, frameworks, testing, SQL. \n
Una de las preguntas más frecuentes en entrevistas PHP para juniors es la diferencia entre == y ===. Parece un detalle menor, pero justo en这些小 detalles es donde fallan incluso desarrolladores experimentados.
Ejemplo: comparación con conversión de tipos
\n\n<?php\n// Comparación débil\nvar_dump(0 == '0'); // true\nvar_dump(0 == false); // true\nvar_dump('' == false); // true\n\n// Comparación estricta\nvar_dump(0 === '0'); // false\nvar_dump(0 === false); // false\nvar_dump('' === false); // false\n?>\n\n¿Por qué es importante? Porque en proyectos reales, la comparación débil puede provocar errores difíciles de detectar. Por ejemplo, al verificar si un valor existe en un array con in_array() sin el tercer parámetro true.
POO en PHP: lo que más preguntan
\n\nEn las entrevistas PHP para nivel middle y senior, las preguntas sobre POO son obligatorias. Pero los juniors también deben estar preparados. Aquí están los 3 temas principales:
\n\n1. Traits vs Interfaces vs Clases abstractas
\n\nMuchos confunden cuándo usar un trait y cuándo una interfaz. Recuerda esta regla simple:
\n- \n
- Interfaz es un contrato. La clase se compromete a implementar los métodos. \n
- Clase abstracta es una implementación parcial + contrato. \n
- Trait es simplemente un conjunto de métodos que se pueden «pegar» en cualquier clase. \n
<?php\ninterface LoggerInterface {\n public function log(string $message): void;\n}\n\nabstract class AbstractLogger implements LoggerInterface {\n protected string $prefix;\n\n public function __construct(string $prefix) {\n $this->prefix = $prefix;\n }\n\n abstract public function formatMessage(string $message): string;\n}\n\ntrait TimestampTrait {\n public function getTimestamp(): string {\n return date('Y-m-d H:i:s');\n }\n}\n\nclass FileLogger extends AbstractLogger {\n use TimestampTrait;\n\n public function formatMessage(string $message): string {\n return $this->getTimestamp() . ' [' . $this->prefix . '] ' . $message;\n }\n\n public function log(string $message): void {\n file_put_contents('log.txt', $this->formatMessage($message) . PHP_EOL, FILE_APPEND);\n }\n}\n?>\n\n2. Principios SOLID
\n\nNo es solo un acrónimo. A los entrevistadores les encanta preguntar: «Pon un ejemplo de violación del principio de sustitución de Liskov (LSP)». El ejemplo más claro es el clásico «cuadrado que hereda de rectángulo».
\n\n<?php\n// Violación de LSP\nclass Rectangle {\n public function __construct(protected int $width, protected int $height) {}\n public function setWidth(int $width): void { $this->width = $width; }\n public function setHeight(int $height): void { $this->height = $height; }\n public function getArea(): int { return $this