Как пройти собеседование по PHP: топ вопросов от А до Я

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Как пройти собеседование по PHP: топ вопросов от А до Я

Собеседование на позицию PHP-разработчика — это не просто проверка знания синтаксиса. Работодатели хотят видеть, как вы мыслите, как решаете проблемы и насколько глубоко понимаете экосистему языка. Чтобы помочь вам подготовиться, мы собрали топ вопросов по PHP от А до Я, разбив их на ключевые темы: от основ ООП до работы с базами данных и безопасности.

Эта статья — ваш чек-лист для успешного прохождения интервью. Изучите её, попрактикуйтесь с примерами кода, и вы будете чувствовать себя уверенно.

1. Основы PHP и ООП (Объектно-Ориентированное Программирование)

Начнём с фундамента. Без понимания ООП в современном PHP делать нечего. Интервьюеры часто задают вопросы, которые проверяют ваше понимание принципов.

Вопрос: Что такое инкапсуляция, наследование и полиморфизм?

Это "три кита" ООП. Умение объяснить их на примере — обязательный навык.

  • Инкапсуляция — скрытие внутренней реализации объекта. Доступ к данным осуществляется через публичные методы (геттеры/сеттеры).
  • Наследование — возможность создавать новый класс на основе существующего (родительского).
  • Полиморфизм — способность объектов разных классов обрабатывать один и тот же метод по-своему.
<?php
// Пример инкапсуляции
class User {
    private string $name;

    public function setName(string $name): void {
        $this->name = htmlspecialchars($name); // Защита от XSS
    }

    public function getName(): string {
        return $this->name;
    }
}

// Пример наследования и полиморфизма
abstract class Animal {
    abstract public function makeSound(): string;
}

class Dog extends Animal {
    public function makeSound(): string {
        return "Гав!";
    }
}

class Cat extends Animal {
    public function makeSound(): string {
        return "Мяу!";
    }
}

$animals = [new Dog(), new Cat()];
foreach ($animals as $animal) {
    echo $animal->makeSound() . " "; // Выведет: Гав! Мяу!
}
?>

Вопрос: В чем разница между интерфейсом и абстрактным классом?

Это классика. Интерфейс задаёт контракт (только сигнатуры методов), а абстрактный класс может содержать реализацию по умолчанию и свойства.

2. Работа с базами данных и SQL

PHP редко работает в отрыве от баз данных. Вопросы про MySQL и PDO — обязательная часть любого собеседования.

Вопрос: Почему стоит использовать PDO, а не mysqli?

PDO (PHP Data Objects) — это абстракция, которая позволяет легко переключаться между разными СУБД (MySQL, PostgreSQL, SQLite) без переписывания кода. Кроме того, PDO поддерживает именованные плейсхолдеры, что делает код чище.

<?php
// Пример безопасного запроса с PDO
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8mb4';
$pdo = new PDO($dsn, 'user', 'password');

$sql = "SELECT * FROM users WHERE email = :email";
$stmt = $pdo->prepare($sql);
$stmt->execute([':email' => 'test@example.com']);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
?>

Вопрос: Как защититься от SQL-инъекций?

Главный ответ: никогда не вставляйте пользовательские данные напрямую в SQL-запрос. Используйте подготовленные выражения (prepared statements) с плейсхолдерами. Это гарантирует, что данные будут экранированы автоматически.

3. Безопасность и лучшие практики

Безопасность — это то, что отличает Junior от Middle. Интервьюеры любят задавать вопросы на эту тему.

Вопрос: Какие типы атак наиболее распространены в веб-приложениях на PHP?

  • XSS (Cross-Site Scripting) — внедрение скриптов. Защита: используйте htmlspecialchars() или strip_tags() при выводе данных.
  • SQL Injection — внедрение SQL-кода. Защита: PDO и подготовленные выражения.
  • CSRF (Cross-Site Request Forgery) — подделка межсайтовых запросов. Защита: использование CSRF-токенов в формах.
  • File Upload Vulnerabilities — загрузка вредоносных файлов. Защита: проверка MIME-типа, ограничение расширений и хранение файлов вне корня веб-сервера.

Вопрос: Как правильно хэшировать пароли?

Никогда не используйте md5 или sha1 для паролей! Используйте password_hash() и password_verify(). Они автоматически используют алгоритм bcrypt (или argon2), что делает взлом практически невозможным.

<?php
// Хэширование пароля
$password = "user_password_123";
$hash = password_hash($password, PASSWORD_DEFAULT); // Использует bcrypt

// Проверка пароля
if (password_verify($password, $hash)) {
    echo "Пароль верен!";
} else {
    echo "Неверный пароль.";
}
?>

4. Фреймворки и современные возможности PHP

Знание современного PHP (версии 8.x) и популярных фреймворков — большой плюс.

Вопрос: Какие нововведения появились в PHP 8?

  • JIT-компилятор (Just-In-Time) — значительное ускорение выполнения кода.
  • Атрибуты (Attributes) — альтернатива аннотациям PHPDoc.
  • Named Arguments — можно передавать аргументы по имени, не соблюдая порядок.
  • Match Expression — более строгий аналог switch.
  • Union Types — возможность указать несколько типов для параметра.
<?php
// Пример Named Arguments и Union Types в PHP 8
function createUser(string $name, int|string $age): void {
    echo "Name: $name, Age: $age";
}                

Блоги

Рекомендаций по книгам