Вопросы на собеседовании: PHP
Подборка реальных вопросов с PHP-собеседований — от джуниорского «чем == отличается от ===» до сеньорского «как устроен подсчёт ссылок и когда включать JIT». Каждый урок разбирает один-три вопроса по единой схеме: что на самом деле проверяет интервьюер, развёрнутый ответ с рабочими примерами кода, типичные ошибки кандидатов и короткая выжимка, которую можно проговорить за полминуты.
Учебник пригодится и тем, кто готовится к интервью, и тем, кто просто хочет разобраться, как PHP работает под капотом: жизненный цикл запроса, OPcache, copy-on-write, автозагрузка PSR-4, внедрение зависимостей и веб-безопасность.
Курс «Вопросы на собеседовании: PHP» состоит из 5 разделов и 15 уроков: Типы и сравнение, ООП в PHP, Устройство языка и производительность, Экосистема и стандарты и Веб и безопасность. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Типы и сравнение
- == или ===: что спрашивают в первую очередь
Разбор вопроса «чем == отличается от ===» на собеседовании по PHP: правила нестрогого сравнения, что изменилось в PHP 8, ловушки in_array и switch.
- Приведение типов и declare(strict_types=1)
Что спрашивают про типизацию PHP: coercive и strict режимы, declare(strict_types=1), приведение строк к числам, ловушки float и валидация ввода.
- Массивы как хэш-таблицы и подводные камни строк
Что такое массив в PHP на самом деле: упорядоченная хэш-таблица, правила ключей, разница array_merge и оператора +, работа с UTF-8 и mb_-функции.
- == или ===: что спрашивают в первую очередь
2 ООП в PHP
- Интерфейс или абстрактный класс: что выбрать
Разбор классического вопроса собеседования по PHP: чем интерфейс отличается от абстрактного класса, когда что применять, зачем нужны final и композиция.
- Трейты, конфликты методов и магия __get/__call
Собеседование по PHP: зачем нужны трейты, как разрешать конфликты через insteadof и as, что такое магические методы __get, __set, __call и чем они опасны.
- self против static, enum и readonly
Вопросы уровня senior по PHP: late static binding и разница self и static, перечисления enum из PHP 8.1 и readonly-свойства для неизменяемых объектов.
- Интерфейс или абстрактный класс: что выбрать
3 Устройство языка и производительность
- Жизненный цикл запроса и модель shared-nothing
Собеседование по PHP: что происходит от прихода HTTP-запроса до ответа, как работает PHP-FPM, почему PHP ничего не помнит между запросами и что из этого следует.
- OPcache, JIT и почему PHP не такой уж медленный
Что спрашивают про производительность PHP: как работает OPcache, что такое опкоды, preloading, JIT в PHP 8 и когда он реально помогает.
- Память: подсчёт ссылок, copy-on-write и генераторы
Вопросы про память в PHP: refcounting и сборщик циклов, copy-on-write при копировании массивов, ссылки &, ловушка foreach по ссылке и генераторы yield.
- Жизненный цикл запроса и модель shared-nothing
4 Экосистема и стандарты
- Composer, автозагрузка PSR-4 и пространства имён
Собеседование по PHP: как работает автозагрузка PSR-4, чем require отличается от autoload, зачем composer.lock и что означают PSR-стандарты.
- Внедрение зависимостей и DI-контейнер
Разбор вопроса о dependency injection в PHP: чем DI отличается от контейнера и service locator, зачем PSR-11, как контейнер автоматически собирает зависимости.
- Ошибки и исключения: Error, Exception, Throwable
Собеседование по PHP: иерархия Throwable, чем Error отличается от Exception, зачем finally, как ловить ошибки в PHP 8 и как правильно обрабатывать исключения.
- Composer, автозагрузка PSR-4 и пространства имён
5 Веб и безопасность
- Сессии и куки: как это работает на самом деле
Собеседование по PHP: чем сессия отличается от куки, где хранятся данные сессии, флаги HttpOnly, Secure и SameSite, session fixation и безопасная авторизация.
- SQL-инъекции и подготовленные запросы в PDO
Разбор вопроса про SQL-инъекции в PHP: почему конкатенация опасна, как работают подготовленные запросы PDO, зачем отключать эмуляцию prepare и что нельзя биндить.
- XSS, CSRF, пароли и валидация ввода
Финальный блок вопросов по безопасности PHP: экранирование вывода против XSS, CSRF-токены, хэширование паролей через password_hash и валидация данных filter_var.
- Сессии и куки: как это работает на самом деле