Como passar em uma entrevista de PHP: análise das principais perguntas
A entrevista para a posição de desenvolvedor PHP não é apenas um teste de sintaxe, mas também um teste de compreensão de arquitetura, segurança e padrões modernos (PSR). Neste artigo, reunimos 10 perguntas-chave que são mais frequentemente feitas em entrevistas para níveis Junior e Middle. Cada pergunta é acompanhada de uma explicação, exemplo de código e armadilhas típicas.
1. Qual a diferença entre echo e print? E entre print_r e var_dump?
Esta é uma pergunta básica que testa o conhecimento das funções de saída embutidas.
echo— é uma construção de linguagem, não retorna valor. Funciona mais rápido queprint.print— também é uma construção, mas sempre retorna1. Pode ser usado em expressões.print_r— exibe informações legíveis por humanos sobre uma variável (arrays, objetos). Retorna uma string se o segundo parâmetro fortrue.var_dump— exibe o tipo e o valor da variável, incluindo o comprimento da string. Útil para depuração.
<?php$arr = ['a' => 1, 'b' => 2];echo print_r($arr, true); // Retorna uma string, não exibe imediatamentevar_dump($arr); // array(2) { ["a"]=> int(1) ["b"]=> int(2) }?>2. O que é carregamento automático de classes e como funciona com o Composer?
O carregamento automático (autoloading) permite que o PHP inclua classes automaticamente na primeira vez que são chamadas, sem a necessidade explícita de require_once.
- Antigamente, usava-se a função
spl_autoload_register(). - Atualmente, o padrão de facto é o Composer e seu autoloader.
- O Composer suporta PSR-4 (namespaces) e PSR-0 (obsoleto).
// composer.json{ "autoload": { "psr-4": { "App\\\\": "src/" } }}
// Após composer dump-autoload// Arquivo src/User.php com namespace App;$user = new \\App\\User(); // Será carregado automaticamente3. Diferença entre include, require, include_once e require_once
Pergunta sobre a compreensão do trabalho com arquivos externos e tratamento de erros.
include— emite um Warning se o arquivo não for encontrado, o script continua a execução.require— emite um Fatal Error, o script é interrompido.*_once— verifica se o arquivo já foi incluído anteriormente e não o inclui novamente.
Armadilha: Usar include em um loop pode causar inclusão repetida e erro de redefinição de funções, se não usar include_once.
4. Como funciona o PDO e por que ele é melhor que as funções mysql_*?
PDO (PHP Data Objects) é uma interface para trabalhar com bancos de dados. É obrigatório para qualquer desenvolvedor PHP moderno.
- Suporta diferentes SGBDs (MySQL, PostgreSQL, SQLite) — basta alterar o DSN.
- Utiliza prepared statements, o que protege contra injeção de SQL.
- Trabalho conveniente com transações e tratamento de erros através de exceções.
<?php$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';$pdo = new PDO($dsn, 'user', 'pass', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');$stmt->execute(['email' => $email]);$user = $stmt->fetch(PDO::FETCH_ASSOC);?>5. O que são métodos mágicos em PHP? Dê exemplos
Métodos mágicos começam com sublinhado duplo (__) e são chamados automaticamente em determinadas ações com o objeto.
__construct()— é chamado ao criar um objeto.__get()/__set()— são chamados ao acessar ou definir propriedades inacessíveis.__call()/__callStatic()— são chamados ao invocar métodos inacessíveis.__toString()— permite que uma classe decida como se comportar quando convertida para string.
<?phpclass User { private $data = [];
public function __get($name) { return $this->data[$name] ?? null; }
public function __set($name, $value) { $this->data[$name] = $value; }
public function __toString() { return $this->data['name'] ?? 'Unknown'; }}
$user = new User();$user->name = 'João';echo $user->name; // Joãoecho $user; // João?>