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

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

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

Начать курс

Введение

Собеседование на позицию PHP-разработчика — это не только проверка синтаксиса языка, но и тест на понимание архитектуры, безопасности и современных подходов. Многие кандидаты теряются на базовых вопросах, потому что не готовятся системно. В этой статье мы разберем топ вопросов, которые чаще всего задают на собеседованиях по PHP, с примерами кода и пояснениями. Материал будет полезен как начинающим, так и опытным разработчикам, желающим освежить знания.

Типы данных и приведение типов

Какие типы данных существуют в PHP?

PHP поддерживает 8 основных типов данных, разделенных на три группы:

  • Скалярные: bool, int, float, string.
  • Составные: array, object, callable, iterable.
  • Специальные: resource, null.

Пример проверки типа:

$value = "123";
if (is_numeric($value)) {
    $intValue = (int) $value; // приведение к int
    var_dump($intValue); // int(123)
}

Чем отличается == от ===?

Оператор == сравнивает значения после приведения типов, а === — без приведения (строгое сравнение). Это одна из самых частых ловушек:

var_dump(0 == "0");   // bool(true)
var_dump(0 === "0");  // bool(false)

ООП в PHP: наследование, интерфейсы и трейты

Что такое трейты и зачем они нужны?

Трейты (traits) — это механизм повторного использования кода в PHP, который решает проблему одиночного наследования. Трейт нельзя инстанцировать, но его можно подключить в класс с помощью use:

trait Logger {
    public function log($message) {
        echo "[LOG]: $message";
    }
}

class User {
    use Logger;
}

$user = new User();
$user->log("Пользователь создан");

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

  • Абстрактный класс может содержать реализацию методов и свойства. Наследуется через extends.
  • Интерфейс определяет только сигнатуры методов (без реализации). Класс может реализовать несколько интерфейсов через implements.
interface CanFly {
    public function fly();
}

abstract class Bird {
    abstract public function sound();
    public function eat() {
        echo "Кушает зерно";
    }
}

class Eagle extends Bird implements CanFly {
    public function sound() { echo "Крик"; }
    public function fly() { echo "Летит"; }
}

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

Что такое PDO и почему его используют?

PDO (PHP Data Objects) — это расширение для работы с базами данных, которое обеспечивает единый интерфейс для разных СУБД (MySQL, PostgreSQL, SQLite и др.). Главное преимущество — защита от SQL-инъекций через подготовленные запросы:

$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute([':email' => 'user@example.com']);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

Как обрабатывать ошибки в PDO?

Лучшая практика — переключить PDO в режим исключений:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
    $pdo->exec("INSERT INTO users (name) VALUES ('John')");
} catch (PDOException $e) {
    echo "Ошибка: " . $e->getMessage();
}

Безопасность и распространенные уязвимости

Как защитить приложение от XSS и SQL-инъекций?

На собеседовании важно показать понимание не только теории, но и практических мер:

  • SQL-инъекции: используйте PDO с подготовленными запросами (см. пример выше). Никогда не конкатенируйте пользовательский ввод в SQL.
  • XSS: экранируйте вывод с помощью htmlspecialchars():
$safeName = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
echo "Привет, $safeName";

Что такое сериализация и какие риски она несет?

Сериализация преобразует объект в строку для хранения. Но unserialize() может выполнить произвольный код, если переданы поддельные данные. Никогда не десериализуйте данные от пользователя:

// Опасно!
$data = unserialize($_GET['data']);
// Безопасная альтернатива — использовать json_encode/json_decode
$safeData = json_decode($_GET['data'], true);

Заключение

Мы разобрали ключевые темы, которые помогут вам уверенно пройти собеседование по PHP: от типов данных и ООП до работы с PDO и безопасности. Помните, что теоретические знания нужно подкреплять практикой — пишите код, разбирайте чужие проекты и не бойтесь задавать вопросы на интервью. Удачи!

Подписывайтесь на блог PythonLib, чтобы получать больше материалов по PHP, Python и веб-разработке.

Блоги

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