Como passar em uma entrevista de PHP: principais perguntas de nível avançado
\n\nA entrevista para a posição de Desenvolvedor PHP Sênior é uma verificação não apenas da sintaxe, mas também da profundidade do entendimento de arquitetura, desempenho e padrões modernos. Neste artigo, analisaremos perguntas avançadas que são frequentemente feitas em entrevistas técnicas e forneceremos respostas detalhadas com exemplos de código. O artigo será útil tanto para se preparar para a entrevista quanto para aprimorar suas habilidades.
\n\n1. Princípios SOLID em PHP: da teoria à prática
\n\nUm dos blocos de perguntas mais populares é o conhecimento e a capacidade de aplicar os princípios SOLID. O entrevistador quer ver como você projeta uma arquitetura flexível e de fácil manutenção.
\n\nPergunta: "Fale sobre o princípio aberto/fechado (OCP) com um exemplo em PHP."
\n\nResposta: As classes devem estar abertas para extensão, mas fechadas para modificação. Em vez de alterar o código existente, adicionamos código novo.
\n\nExemplo de violação do OCP:
\n<?php\nclass ReportGenerator {\n public function generate($type) {\n if ($type === 'pdf') {\n // geração de PDF\n } elseif ($type === 'csv') {\n // geração de CSV\n }\n }\n}\n\n\nSolução respeitando o OCP:
\n<?php\ninterface ReportInterface {\n public function generate(): string;\n}\n\nclass PdfReport implements ReportInterface {\n public function generate(): string {\n return 'Conteúdo PDF';\n }\n}\n\nclass CsvReport implements ReportInterface {\n public function generate(): string {\n return 'Conteúdo CSV';\n }\n}\n\nclass ReportGenerator {\n public function generate(ReportInterface $report): string {\n return $report->generate();\n }\n}\n\n\nEssa abordagem permite adicionar novos formatos de relatório sem alterar o código existente do ReportGenerator.
2. Padrões de Projeto: Singleton, Factory e Injeção de Dependência
\n\nO conhecimento de padrões é um requisito obrigatório para uma posição sênior. Os mais perguntados são Singleton, Factory e Injeção de Dependência.
\n\nPergunta: "Implemente o padrão Singleton em PHP e explique quando usá-lo."
\n\nResposta: O Singleton garante que uma classe tenha apenas uma instância. É usado para conexão com banco de dados, logger ou configuração.
\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 // Proíbe clonagem e desserialização\n private function __clone() {}\n public function __wakeup() {\n throw new \\Exception("Cannot unserialize singleton");\n }\n}\n\n// Uso\n$db = Database::getInstance();\n\n\nPergunta: "O que é Injeção de Dependência e como implementá-la sem um framework?"
\n\nResposta: DI é a passagem de dependências para uma classe através do construtor ou setters, em vez de criá-las dentro da classe.
\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 // Injeção de dependência via construtor\n public function __construct(Logger $logger) {\n $this->logger = $logger;\n }\n\n public function createUser(array $data): void {\n // lógica de criação de usuário\n $this->logger->log('Usuário criado');\n }\n}\n\n// Uso\n$logger =