Como passar em uma entrevista de PHP: principais perguntas de nível avançado
A entrevista para a posição de Desenvolvedor PHP Sênior não é apenas uma verificação de sintaxe. O empregador avalia o pensamento arquitetônico, a compreensão do funcionamento interno da linguagem, a experiência com sistemas de alta carga e o conhecimento dos padrões modernos. Neste artigo, analisaremos as principais perguntas de nível avançado com exemplos práticos que o ajudarão a passar com confiança na entrevista técnica.
1. SOLID em PHP: princípios e exemplos de violações
A pergunta sobre SOLID é um clássico de qualquer entrevista. É importante não apenas listar os princípios, mas também mostrar como sua violação leva a problemas e como corrigi-los.
Princípio da Responsabilidade Única (SRP). Uma classe deve ter apenas um motivo para ser alterada. Vamos considerar uma violação típica:
class User { public function save() { /* salvar no BD */ } public function sendEmail() { /* enviar e-mail */ } public function generateReport() { /* gerar relatório */ }}Aqui, a classe User é responsável por salvar, notificações e relatórios. A abordagem correta é separar cada responsabilidade em um serviço distinto:
class UserRepository { public function save(User $user) { /* ... */ }}
class MailService { public function sendWelcomeEmail(User $user) { /* ... */ }}
class ReportGenerator { public function generate(User $user) { /* ... */ }}Princípio Aberto/Fechado (OCP). As classes devem estar abertas para extensão, mas fechadas para modificação. Em vez de if-else, use polimorfismo:
// Violação do OCPclass PaymentProcessor { public function pay(string $type) { if ($type === 'credit_card') { /* ... */ } elseif ($type === 'paypal') { /* ... */ } }}
// Solução corretainterface PaymentMethod { public function process();}
class CreditCardPayment implements PaymentMethod { public function process() { /* ... */ }}
class PayPalPayment implements PaymentMethod { public function process() { /* ... */ }}
class PaymentProcessor { public function pay(PaymentMethod $method) { $method->process(); }}Na entrevista, mencione obrigatoriamente que para PHP também é importante o Princípio da Inversão de Dependência (DIP) — dependência de abstrações, não de classes concretas. Mostre um exemplo com Injeção de Dependência:
class OrderService { private PaymentMethod $paymentMethod; public function __construct(PaymentMethod $paymentMethod) { $this->paymentMethod = $paymentMethod; } public function checkout() { $this->paymentMethod->process(); }}2. Padrões de Projeto: quando e por quê
As perguntas sobre padrões em uma entrevista verificam se você sabe aplicar soluções típicas em problemas reais. Não basta apenas nomear o padrão — é preciso explicar qual problema ele resolve.
Singleton. Usado para objetos que devem existir em uma única instância (por exemplo, conexão com o BD). Mas esteja preparado para críticas: muitos consideram Singleton um anti-padrão devido a dependências ocultas e problemas de teste.
class Database { private static ?Database $instance = null; private function __construct() { } public static function getInstance(): Database { if (self::$instance === null) { self::$instance = new self(); } return self::$instance; }}Factory Method. Cria objetos sem especificar a classe concreta. Particularmente útil ao trabalhar com diferentes tipos de conexões:
interface Connection { }class MysqlConnection implements Conn