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. Junior: teoria básica, definições e casos práticos simples.
1
Qual é a diferença entre `==` e `===`?
Resposta
== compara depois do type juggling, === compara valor e tipo. O PHP 8 tornou o juggling bem mais sensato — 0 == "foo" agora é false — mas a regra continua a mesma: use === a menos que tenha um motivo para não usar, porque a tabela de comparação é algo que ninguém deveria precisar decorar.
2
Qual é a diferença entre uma interface, uma classe abstrata e um trait?
Resposta
Uma interface declara o que uma classe pode fazer e não carrega implementação. Uma classe abstrata pode ter estado e implementação parcial, e uma classe só pode estender uma. Um trait é código injetado numa classe — a resposta do PHP para não ter herança múltipla. Traits são para implementação compartilhada, interfaces para contrato compartilhado.
3
O que `public`, `protected` e `private` realmente restringem?
Resposta
public é acessível de qualquer lugar, protected da classe e de suas subclasses, private só da classe que o declara. private é mais restrito do que as pessoas esperam — uma subclasse não consegue ver. Use private por padrão e amplie quando algo externo genuinamente precisar de acesso.
4
Qual é a diferença entre `include` e `require`?
Resposta
Ambos trazem um arquivo; require lança um erro fatal se estiver faltando, include só um warning e continua. As variantes _once pulam um arquivo já carregado. No código moderno você encontra esses raramente, porque o autoloader do Composer resolve classes por namespace e você nunca escreve o caminho.
5
O que é Composer e para que serve o `composer.lock`?
Resposta
O Composer resolve e instala dependências. O composer.json diz o que você quer, o composer.lock registra exatamente o que foi resolvido — por isso o lock file é commitado e por isso composer install no servidor reproduz a mesma árvore em vez de escolher versões mais novas.
6
O que é type juggling e onde ele ainda morde?
Resposta
É o PHP convertendo tipos para compará-los ou operar sobre eles. Ainda morde quando uma string vinda de um formulário chega onde se esperava um número, e em comparações frouxas dentro de in_array ou switch, que usam == por padrão. Declarar strict_types=1 no início de um arquivo transforma a coerção silenciosa num erro.
7
O que são as superglobais e por que você não deveria lê-las diretamente?
Resposta
$_GET, $_POST, $_SERVER, $_SESSION e o resto guardam dados do request. Lê-las diretamente espalha input não validado pelo código e torna tudo que as toca impossível de testar, já que não existe um request para construir. O objeto request de um framework as envolve, por isso você usa ele.