Entrevistas de PHP cobrem semântica da linguagem, OOP, Laravel ou Symfony, MySQL, e fundamentos de segurança web. Abaixo estão as perguntas mais comuns com respostas modelo.
Cada pergunta vem com uma resposta modelo para você comparar com a sua.
1
Qual é a diferença entre == e === no PHP?
Resposta
== compara valores depois do type juggling, enquanto === também exige que os tipos coincidam. A comparação frouxa produz surpresas famosas: "abc" == 0 era true antes do PHP 8, e "1e2" == "100" continua sendo true porque ambos parecem numéricos. A regra em código de produção é sempre usar === a menos que você tenha um motivo específico para não fazer isso.
2
O que são traits? Em que se diferenciam de herança e interfaces?
Resposta
Um trait é um bloco de métodos e propriedades que pode ser composto dentro de uma classe, contornando a herança simples do PHP. Uma interface declara um contrato sem implementação; a herança dá uma relação is-a com um único pai; um trait dá implementação reutilizável sem relação de tipo. Conflitos entre traits precisam ser resolvidos explicitamente com insteadof ou as.
3
Explique os princípios SOLID com exemplos em PHP.
Resposta
Single Responsibility: uma classe tem um único motivo para mudar, então um controller não deveria também gerar PDFs. Open/Closed: você estende comportamento através de novas classes em vez de editar as existentes. Liskov: uma subclasse deve poder ser usada em qualquer lugar onde o pai é usado. Interface Segregation: várias interfaces pequenas superam uma gorda. Dependency Inversion: depender de interfaces injetadas no construtor, não de classes concretas criadas com new.
4
O que é o Dependency Injection Container no Laravel e como funciona?
Resposta
O container resolve as dependências das classes automaticamente refletindo os type hints do construtor e instanciando recursivamente o que for necessário. Você vincula interfaces a implementações concretas num service provider, então trocar uma implementação é uma mudança de uma linha só. Bindings singleton compartilham uma instância por ciclo de vida do request, o que importa para serviços com estado, como um connection pool.
5
Como você se protege contra SQL injection? O que são prepared statements?
Resposta
Um prepared statement envia a estrutura SQL e os parâmetros separadamente, então o input do usuário nunca é interpretado como SQL e erros de aspas não conseguem virar uma injeção. Em PHP isso significa PDO ou mysqli com parâmetros vinculados, ou um ORM que faz isso por você. Concatenar strings numa query é a vulnerabilidade; funções de escape são um substituto frágil porque dependem do charset e do contexto.
6
O que é o Eloquent ORM? Explique o problema N+1 e como resolvê-lo.
Resposta
Eloquent é o ORM active-record do Laravel, onde cada model mapeia para uma tabela e os relacionamentos são definidos como métodos. O N+1 acontece quando você faz loop sobre models e acessa um relacionamento, disparando uma consulta por linha. A solução é eager loading com with(), e você consegue pegar isso no desenvolvimento habilitando Model::preventLazyLoading() para que um acesso lazy lance um erro em vez de degradar silenciosamente.
7
O que é middleware no Laravel? Dê um exemplo de uso.
Resposta
O middleware envolve o pipeline do request HTTP, permitindo que você rode código antes ou depois do controller — autenticação, rate limiting, headers CORS, logging. Cada middleware recebe o request e um closure $next, decide se passa adiante, e pode modificar a resposta ao retornar. Como ele se compõe, as preocupações transversais ficam fora dos controllers.
8
Como funciona o autoloading de classes via Composer e PSR-4?
Resposta
O PSR-4 mapeia um prefixo de namespace para um diretório, então App\Services\Mailer resolve para src/Services/Mailer.php. O Composer gera um autoloader a partir do mapping no composer.json e o registra com spl_autoload_register, então as classes carregam no primeiro uso em vez de serem incluídas manualmente. Em produção você roda composer dump-autoload --optimize para construir um mapa de classes estático e pular as buscas no filesystem.
9
O que são XSS e CSRF? Como você protege uma aplicação PHP?
Resposta
XSS injeta script executável numa página — previne-se escapando toda a saída com htmlspecialchars ou as chaves duplas do Blade, mais uma Content Security Policy. CSRF engana um navegador autenticado para enviar um request que o usuário não pretendia — previne-se com um token por sessão em todo formulário que muda estado e cookies SameSite. A distinção chave é que XSS abusa da confiança no site, CSRF abusa da confiança do site no navegador.
10
Qual é a diferença entre include, require, include_once e require_once?
Resposta
include emite um warning e continua se o arquivo estiver faltando; require lança um erro fatal e para. As variantes _once rastreiam arquivos já carregados e pulam duplicatas, o que evita erros de redeclaração. No código moderno as quatro são majoritariamente irrelevantes porque o autoloading do Composer cuida do carregamento de classes, e os includes explícitos sobram só para arquivos de config ou templates.