Cómo aprobar una entrevista de PHP: las mejores preguntas de nivel avanzado
\n\nLa entrevista para un puesto de Senior PHP Developer no solo evalúa la sintaxis, sino también la profundidad en la comprensión de la arquitectura, el rendimiento y los estándares modernos. En este artículo analizaremos las preguntas avanzadas que suelen hacerse en las entrevistas técnicas y ofreceremos respuestas detalladas con ejemplos de código. Este artículo será útil tanto para prepararse para una entrevista como para mejorar tus habilidades.
\n\n1. Principios SOLID en PHP: de la teoría a la práctica
\n\nUno de los bloques de preguntas más populares es el conocimiento y la capacidad de aplicar los principios SOLID. El entrevistador quiere ver cómo diseñas una arquitectura flexible y mantenible.
\n\nPregunta: "Hable sobre el principio de abierto/cerrado (OCP) con un ejemplo en PHP."
\n\nRespuesta: Las clases deben estar abiertas para la extensión, pero cerradas para la modificación. En lugar de modificar el código existente, añadimos código nuevo.
\n\nEjemplo de violación de OCP:
\n<?php\nclass ReportGenerator {\n public function generate($type) {\n if ($type === 'pdf') {\n // generación de PDF\n } elseif ($type === 'csv') {\n // generación de CSV\n }\n }\n}\n\n\nSolución cumpliendo con OCP:
\n<?php\ninterface ReportInterface {\n public function generate(): string;\n}\n\nclass PdfReport implements ReportInterface {\n public function generate(): string {\n return 'Contenido PDF';\n }\n}\n\nclass CsvReport implements ReportInterface {\n public function generate(): string {\n return 'Contenido CSV';\n }\n}\n\nclass ReportGenerator {\n public function generate(ReportInterface $report): string {\n return $report->generate();\n }\n}\n\n\nEste enfoque permite añadir nuevos formatos de informes sin modificar el código existente de ReportGenerator.
2. Patrones de diseño: Singleton, Factory e Inyección de Dependencias
\n\nEl conocimiento de patrones es un requisito obligatorio para un puesto senior. Los más preguntados son Singleton, Factory e Inyección de Dependencias.
\n\nPregunta: "Implemente el patrón Singleton en PHP y explique cuándo usarlo."
\n\nRespuesta: Singleton garantiza que una clase tenga una única instancia. Se utiliza para la conexión a la base de datos, el logger o la configuración.
\n\n<?php\nclass Database {\n private static $instance = null;\n private $connection;\n\n private function __construct() {\n $this->connection = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');\n }\n\n public static function getInstance(): self {\n if (self::$instance === null) {\n self::$instance = new self();\n }\n return self::$instance;\n }\n\n public function getConnection(): PDO {\n return $this->connection;\n }\n\n // Prohibir clonación y deserialización\n private function __clone() {}\n public function __wakeup() {\n throw new \\Exception("No se puede deserializar un singleton");\n }\n}\n\n// Uso\n$db = Database::getInstance();\n\n\nPregunta: "¿Qué es la Inyección de Dependencias y cómo implementarla sin un framework?"
\n\nRespuesta: DI es pasar las dependencias a una clase a través del constructor o setters, en lugar de crearlas dentro de la clase.
\n\n<?php\nclass Logger {\n public function log(string $message): void {\n echo $message;\n }\n}\n\nclass UserService {\n private Logger $logger;\n\n // Inyección de dependencia a través del constructor\n public function __construct(Logger $logger) {\n $this->logger = $logger;\n }\n\n public function createUser(array $data): void {\n // lógica de creación de usuario\n $this->logger->log('Usuario creado');\n }\n}\n\n// Uso\n$logger =