Entrevista de PHP: por onde começar para não fracassar?
\n\nVocê enviou seu currículo, passou por uma rápida conversa com o RH e, de repente, recebeu o convite para a entrevista técnica. O coração acelera: "E se perguntarem algo que eu não sei?", "E se eu esquecer a sintaxe?", "E se pedirem para escrever código no quadro?".
\n\nSpoiler: muito provavelmente, vão pedir. E isso é normal. A entrevista de PHP não é um exame de decoreba, mas sim um diálogo. Porém, um diálogo que exige preparação. Neste artigo, vamos analisar o que realmente é perguntado em entrevistas para desenvolvedores PHP em 2025, quais erros 90% dos candidatos cometem e como se destacar.
\n\nO que é essencial saber: estrutura de preparação
\n\nPara que sua preparação para a entrevista de PHP seja sistemática, divida-a em três blocos:
\n\n- \n
- Fundamentos da linguagem: tipos de dados, arrays, funções, manipulação de arquivos, sessões. \n
- POO e arquitetura: herança, encapsulamento, polimorfismo, traits, interfaces. \n
- Ferramentas e ecossistema: Composer, PSR, frameworks, testes, SQL. \n
Uma das perguntas mais frequentes em entrevistas PHP para júnior é a diferença entre == e ===. Parece um detalhe, mas é justamente nesses detalhes que até desenvolvedores experientes tropeçam.
Exemplo: comparação com coerção de tipos
\n\n<?php\n// Comparação não estrita\nvar_dump(0 == '0'); // true\nvar_dump(0 == false); // true\nvar_dump('' == false); // true\n\n// Comparação estrita\nvar_dump(0 === '0'); // false\nvar_dump(0 === false); // false\nvar_dump('' === false); // false\n?>\n\nPor que isso é importante? Porque em projetos reais, a comparação não estrita pode gerar bugs difíceis de detectar. Por exemplo, ao verificar a existência de um valor em um array com in_array() sem o terceiro parâmetro true.
POO em PHP: o que mais perguntam
\n\nEm entrevistas de PHP para nível pleno e sênior, perguntas sobre POO são obrigatórias. Mas até mesmo os juniores devem estar preparados. Veja os 3 tópicos principais:
\n\n1. Traits vs Interfaces vs Classes Abstratas
\n\nMuita gente confunde quando usar um trait e quando usar uma interface. Lembre-se desta regra simples:
\n- \n
- Interface — é um contrato. A classe se compromete a implementar os métodos. \n
- Classe abstrata — implementação parcial + contrato. \n
- Trait — é apenas um conjunto de métodos que podem ser "colados" em qualquer classe. \n
<?php\ninterface LoggerInterface {\n public function log(string $message): void;\n}\n\nabstract class AbstractLogger implements LoggerInterface {\n protected string $prefix;\n\n public function __construct(string $prefix) {\n $this->prefix = $prefix;\n }\n\n abstract public function formatMessage(string $message): string;\n}\n\ntrait TimestampTrait {\n public function getTimestamp(): string {\n return date('Y-m-d H:i:s');\n }\n}\n\nclass FileLogger extends AbstractLogger {\n use TimestampTrait;\n\n public function formatMessage(string $message): string {\n return $this->getTimestamp() . ' [' . $this->prefix . '] ' . $message;\n }\n\n public function log(string $message): void {\n file_put_contents('log.txt', $this->formatMessage($message) . PHP_EOL, FILE_APPEND);\n }\n}\n?>\n\n2. Princípios SOLID
\n\nNão é apenas uma sigla. Os entrevistadores adoram perguntar: "Dê um exemplo de violação do princípio de substituição de Liskov (LSP)". O exemplo mais clássico é o "quadrado herdar de retângulo".
\n\n<?php\n// Violação do LSP\nclass Rectangle {\n public function __construct(protected int $width, protected int $height) {}\n public function setWidth(int $width): void { $this->width = $width; }\n public function setHeight(int $height): void { $this->height = $height; }\n public function getArea(): int { return $this