Провалить собеседование по PHP: 3 типичные ошибки и как их избежать

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

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

Начать курс

Собеседование по PHP: с чего начать, чтобы не провалиться?

Вы отправили резюме, прошли короткое созвон с HR, и вот — приглашение на техническое собеседование. Сердце начинает биться чаще: «А что, если спросят про что-то, чего я не знаю?», «А если я забуду синтаксис?», «А если попросят написать код на доске?».

Спойлер: скорее всего, попросят. И это нормально. Собеседование по PHP — это не экзамен по билетам, а диалог. Но диалог, к которому нужно подготовиться. В этой статье мы разберём, что реально спрашивают на собеседованиях PHP-разработчиков в 2025 году, какие ошибки совершают 90% кандидатов, и как показать себя с лучшей стороны.

Что важно знать: структура подготовки

Чтобы подготовка к собеседованию PHP была системной, разбейте её на три блока:

  • База языка: типы данных, массивы, функции, работа с файлами, сессии.
  • ООП и архитектура: наследование, инкапсуляция, полиморфизм, трейты, интерфейсы.
  • Инструменты и экосистема: Composer, PSR, фреймворки, тестирование, SQL.

Один из самых частых вопросов на собеседовании PHP junior — разница между == и ===. Кажется, что мелочь, но именно на таких мелочах сыпятся даже опытные разработчики.

Пример: сравнение с приведением типов

<?php
// Нестрогое сравнение
var_dump(0 == '0'); // true
var_dump(0 == false); // true
var_dump('' == false); // true

// Строгое сравнение
var_dump(0 === '0'); // false
var_dump(0 === false); // false
var_dump('' === false); // false
?>

Почему это важно? Потому что в реальных проектах нестрогое сравнение может привести к трудноуловимым багам. Например, при проверке наличия значения в массиве с помощью in_array() без третьего параметра true.

ООП в PHP: что спрашивают чаще всего

На собеседовании по PHP для middle и senior уровня вопросы по ООП — обязательны. Но и джуниорам стоит быть готовыми. Вот топ-3 темы:

1. Трейты vs Интерфейсы vs Абстрактные классы

Многие путают, когда использовать трейт, а когда — интерфейс. Запомните простое правило:

  • Интерфейс — это контракт. Класс обязуется реализовать методы.
  • Абстрактный класс — частичная реализация + контракт.
  • Трейт — это просто набор методов, которые можно «вклеить» в любой класс.
<?php
interface LoggerInterface {
    public function log(string $message): void;
}

abstract class AbstractLogger implements LoggerInterface {
    protected string $prefix;

    public function __construct(string $prefix) {
        $this->prefix = $prefix;
    }

    abstract public function formatMessage(string $message): string;
}

trait TimestampTrait {
    public function getTimestamp(): string {
        return date('Y-m-d H:i:s');
    }
}

class FileLogger extends AbstractLogger {
    use TimestampTrait;

    public function formatMessage(string $message): string {
        return $this->getTimestamp() . ' [' . $this->prefix . '] ' . $message;
    }

    public function log(string $message): void {
        file_put_contents('log.txt', $this->formatMessage($message) . PHP_EOL, FILE_APPEND);
    }
}
?>

2. Принципы SOLID

Это не просто аббревиатура. Интервьюеры любят спрашивать: «Приведите пример нарушения принципа подстановки Лисков (LSP)». Самый наглядный пример — классический «квадрат наследует от прямоугольника».

<?php
// Нарушение LSP
class Rectangle {
    public function __construct(protected int $width, protected int $height) {}
    public function setWidth(int $width): void { $this->width = $width; }
    public function setHeight(int $height): void { $this->height = $height; }
    public function getArea(): int { return $this->width * $this->height; }
}

class Square extends Rectangle {
    public function setWidth(int $width): void {
        $this->width = $width;
        $this->height = $width; // Ломает контракт!
    }
    public function setHeight(int $height): void {
        $this->width = $height;
        $this->height = $height; // Ломает контракт!
    }
}
?>

Правильное решение — не наследовать Square от Rectangle, а создать общий интерфейс Shape.

Паттерны проектирования: must-have для собеседования

На собеседовании PHP-разработчика часто просят реализовать простой паттерн. Самые популярные: Singleton, Factory, Strategy, Observer.

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

Пример: простой Factory Method

<?php
interface PaymentGateway {
    public function charge(float $amount): bool;
}

class StripeGateway implements PaymentGateway {
    public function charge(float $amount): bool {
        // логика Stripe
        return true;
    }
}

class PayPalGateway implements PaymentGateway {
    public function charge(float $amount): bool {
        // логика PayPal
        return true;
    }
}

class PaymentFactory {
    public static function create(string $type): PaymentGateway {
        return match($type) {
            'stripe' => new StripeGateway(),
            'paypal' => new PayPalGateway(),
            default => throw new \InvalidArgumentException("Unknown gateway: $type"),
        };
    }
}

// Использование
$gateway = PaymentFactory::create('stripe');
$gateway->charge(100.50);
?>

Работа с базами данных: SQL и PDO

Без SQL никуда. Даже если вы пишете на PHP, базы данных — часть вашей работы. На собеседовании по PHP спросят:

  • Разница между INNER JOIN и LEFT JOIN.
  • Что такое индексы и когда они нужны.
  • Как избежать SQL-инъекций.

Последний пункт — критически важен. Покажите, что вы используете подготовленные запросы (prepared statements).

<?php
// НЕПРАВИЛЬНО: конкатенация строк
$sql = "SELECT * FROM users WHERE email = '" . $_GET['email'] . "'";

// ПРАВИЛЬНО: подготовленный запрос
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute(['email' => $_GET['email']]);
$user = $stmt->fetch();
?>

Стандарты PSR и Composer

Вопрос «Что такое PSR-4?» — один из самых частых на собеседовании PHP middle. PSR — это рекомендации PHP-FIG, которые делают код совместимым между разными библиотеками.

PS

Блоги

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