Собеседование по PHP: не бойся, а готовься
Собеседование на позицию PHP-разработчика — это не экзамен по билетам, а диалог. Но диалог, в котором от вас ждут не просто «я знаю PHP», а понимания того, как язык работает под капотом. Подготовка к собеседованию по PHP — это не зубрёжка определений, а разбор реальных кейсов.
В этой статье мы не будем перечислять сотню вопросов. Вместо этого я покажу вам шаблон мышления: как отвечать на вопросы, как писать код и на что обратить внимание, чтобы интервьюер сказал «вау». Поехали.
1. Основы PHP: что нужно знать обязательно
Начнём с базы. Даже если вы идёте на Senior, вопросы по основам могут всплыть. Вот три кита, на которых держится собеседование PHP:
- Типы данных и приведение типов — как работает
==vs===, что такоеstrict_types. - Суперглобальные массивы —
$_GET,$_POST,$_SERVER,$_SESSION. - Работа с массивами —
array_map,array_filter,array_reduce.
Пример вопроса: «Что выведет код?».
<?php
$a = '5';
$b = 5;
var_dump($a == $b); // bool(true) — нестрогое сравнение
var_dump($a === $b); // bool(false) — строгое сравнение
?>
Помните: собеседование PHP junior часто строится именно на таких ловушках. Не попадитесь.
2. ООП в PHP: не просто «класс и объект»
Вопросы по PHP на интервью всегда включают ООП. Но вместо того, чтобы перечислять три столпа (инкапсуляция, наследование, полиморфизм), покажите, как вы их используете.
Пример: спросят про интерфейсы и абстрактные классы. Не говорите «интерфейс — это контракт». Лучше приведите код:
<?php
interface PaymentGateway {
public function pay(float $amount): bool;
}
class StripeGateway implements PaymentGateway {
public function pay(float $amount): bool {
// логика оплаты через Stripe
return true;
}
}
class PayPalGateway implements PaymentGateway {
public function pay(float $amount): bool {
// логика оплаты через PayPal
return true;
}
}
function processOrder(PaymentGateway $gateway, float $total) {
if ($gateway->pay($total)) {
echo "Оплата прошла успешно";
}
}
?>
Такой ответ показывает, что вы понимаете принцип подстановки Барбары Лисков и умеете проектировать гибкие системы. Это сразу +100 к карме на собеседовании PHP middle.
3. Работа с базами данных: SQL и PDO
Ни одно собеседование PHP не обходится без вопросов по MySQL. Запомните: никогда не используйте mysql_* функции — они удалены из PHP 7. Используйте PDO или mysqli.
Типичная задача: «Напишите безопасный запрос к БД».
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute(['email' => $email]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
?>
Почему это важно? Потому что SQL-инъекции — классическая ошибка джуниоров. Покажите, что вы знаете про prepared statements.
Ещё один частый вопрос — JOIN'ы. Будьте готовы объяснить разницу между INNER, LEFT, RIGHT и FULL JOIN. И обязательно приведите пример, когда какой использовать.
4. Типичные задачи на собеседовании PHP
Задачи PHP — это не только теория. Вам могут дать live coding. Вот три типа задач, которые часто встречаются:
4.1. Задача на массивы
«Напишите функцию, которая группирует массив объектов по ключу».
<?php
function groupBy(array $items, string $key): array {
$result = [];
foreach ($items as $item) {
$result[$item[$key]][] = $item;
}
return $result;
}
$users = [
['name' => 'Анна', 'city' => 'Москва'],
['name' => 'Иван', 'city' => 'СПб'],
['name' => 'Мария', 'city' => 'Москва'],
];
print_r(groupBy($users, 'city'));
?>
Такая задача проверяет не только знание синтаксиса, но и умение писать читаемый код.
4.2. Задача на строки
«Проверьте, является ли строка палиндромом».
<?php
function isPalindrome(string $str): bool {
$str = strtolower(preg_replace('/[^a-zа-яё0-9]/u', '', $str));
return $str === strrev($str);
}
?>
Здесь важно показать, что вы учитываете Unicode (русские буквы) и очищаете строку от мусора.
4.3. Задача на рекурсию
«Напишите функцию для обхода дерева категорий».
<?php
function printCategories(array $categories, int $depth = 0) {
foreach ($categories as $category) {
echo str_repeat('--', $depth) . $category['name'] . "\n";
if (!empty($category['children'])) {
printCategories($category['children'], $depth + 1);
}
}
}
?>
Подготовка к собеседованию PHP должна включать практику таких задач. Решайте по 2-3 в день на LeetCode или Codewars.
5. Фреймворки: Laravel или Symfony?
На собеседовании PHP разработчик вас обязательно спросят про фреймворки. Если в вакансии указан Laravel — будьте готовы рассказать про:
- Service Container и Service Provider
- Eloquent ORM (ленивая и жадная загрузка, N+1 проблема)
- Middleware и роутинг
Пример вопроса: «Как исправить проблему N+1 в Laravel?».
<?php
// Плохо: N+1 запросов
$posts = Post::all();
foreach ($posts as $post) {
echo $post->author->name;
}
// Хорошо: 2 запроса
$posts = Post::with('author')->get();
foreach ($posts as $post) {
echo $post->author->name;
}
?>
Если используете Symfony — акцент на Dependency Injection, Event Dispatcher и Doctrine. Покажите, что вы понимаете, как