AI
prepair.app
Пройти интервью →
EnglishРусскийУкраїнська
🐘

вопросы на собеседовании PHP

Собеседование PHP охватывает семантику языка, ООП, Laravel или Symfony, MySQL и основы веб-безопасности. Ниже — самые частые вопросы с эталонными ответами.

Junior · без опыта / до 1 годаMiddle · 2–4 года опытаSenior · 5+ лет опыта

Что спрашивают

ООП и SOLID в PHP
Laravel / Symfony
MySQL и оптимизация запросов
Composer и автозагрузка
Сессии, куки, безопасность
Стандарты PSR

10 реальных вопросов с ответами

К каждому вопросу — эталонный ответ, с которым можно сравнить свой.

1

В чём разница между == и === в PHP?

Ответ

== сравнивает значения после приведения типов, === дополнительно требует совпадения типов. Нестрогое сравнение даёт известные сюрпризы: до PHP 8 выражение "abc" == 0 было истинным, а "1e2" == "100" истинно до сих пор, потому что обе строки выглядят числами. Правило в продакшене простое — всегда ===, если нет конкретной причины поступить иначе.

2

Что такое traits? Чем они отличаются от наследования и интерфейсов?

Ответ

Trait — это блок методов и свойств, который подмешивается в класс в обход одиночного наследования PHP. Интерфейс объявляет контракт без реализации; наследование даёт связь «является» с одним родителем; trait даёт переиспользуемую реализацию без типовой связи. Конфликты между трейтами нужно разрешать явно через insteadof или as.

3

Объясните принципы SOLID на примерах PHP.

Ответ

Single Responsibility: у класса одна причина для изменения, поэтому контроллер не собирает ещё и PDF. Open/Closed: поведение расширяют новыми классами, а не правкой существующих. Liskov: наследника можно подставить всюду, где ожидается родитель. Interface Segregation: много маленьких интерфейсов лучше одного раздутого. Dependency Inversion: зависеть от интерфейсов, переданных в конструктор, а не от конкретных классов, созданных через new.

4

Что такое Dependency Injection Container в Laravel и как он работает?

Ответ

Контейнер разрешает зависимости автоматически: он читает тайп-хинты конструктора через рефлексию и рекурсивно создаёт всё необходимое. Интерфейсы привязывают к конкретным реализациям в сервис-провайдере, поэтому подмена реализации это правка одной строки. Singleton-привязки отдают один экземпляр на жизненный цикл запроса, что важно для сервисов с состоянием вроде пула соединений.

5

Как защититься от SQL-инъекций? Что такое prepared statements?

Ответ

Подготовленный запрос отправляет структуру SQL и параметры раздельно, поэтому пользовательский ввод никогда не парсится как SQL, а ошибки экранирования не превращаются в инъекцию. В PHP это PDO или mysqli с привязкой параметров либо ORM, который делает это за вас. Уязвимость создаёт именно конкатенация строк в запрос; функции экранирования — хрупкая замена, потому что зависят от кодировки и контекста.

6

Что такое Eloquent ORM? Объясните N+1 и как её решить.

Ответ

Eloquent — это active-record ORM Laravel, где модель отображается на таблицу, а связи описываются методами. N+1 возникает, когда вы идёте циклом по моделям и обращаетесь к связи, порождая по запросу на строку. Лечится жадной загрузкой через with(), а поймать это в разработке помогает Model::preventLazyLoading(), после которого ленивое обращение падает с ошибкой вместо тихой деградации.

7

Что такое middleware в Laravel? Приведите пример использования.

Ответ

Middleware оборачивает конвейер HTTP-запроса и позволяет выполнить код до или после контроллера — аутентификация, ограничение частоты запросов, заголовки CORS, логирование. Каждый middleware получает запрос и замыкание $next, решает, пропускать ли дальше, и может изменить ответ на обратном пути. За счёт композиции сквозная логика не расползается по контроллерам.

8

Как работает автозагрузка классов через Composer и PSR-4?

Ответ

PSR-4 сопоставляет префикс пространства имён с каталогом, поэтому App\Services\Mailer разрешается в src/Services/Mailer.php. Composer генерирует автозагрузчик из карты в composer.json и регистрирует его через spl_autoload_register, так что классы подгружаются при первом обращении, а не подключаются вручную. В продакшене запускают composer dump-autoload --optimize, чтобы собрать статическую карту классов и не ходить в файловую систему.

9

Что такое XSS и CSRF? Как от них защититься в PHP-приложении?

Ответ

XSS внедряет исполняемый скрипт в страницу — защита в экранировании всего вывода через htmlspecialchars или двойные фигурные скобки Blade плюс Content Security Policy. CSRF заставляет браузер авторизованного пользователя отправить непреднамеренный запрос — защита в токене на каждую форму, меняющую состояние, и куках SameSite. Ключевое различие: XSS злоупотребляет доверием пользователя к сайту, CSRF — доверием сайта к браузеру.

10

В чём разница между include, require, include_once и require_once?

Ответ

include при отсутствии файла выдаёт предупреждение и продолжает работу, require бросает фатальную ошибку и останавливает выполнение. Варианты _once запоминают уже подключённые файлы и пропускают повторы, что предотвращает ошибки переобъявления. В современном коде все четыре почти не нужны, потому что загрузкой классов занимается автозагрузка Composer, а явные подключения остаются лишь для конфигов и шаблонов.

🦎

Прочитать ответы недостаточно

На собеседовании ты говоришь вслух под давлением. Кем задаст эти же вопросы, оценит каждый ответ и покажет, что именно подтянуть.

Пройти интервью PHP Backend →
Бесплатно · 3 интервью в месяц

Другие специализации

🔍QA Manual🤖QA AutomationJava Backend🐍Python Backend🦫Go Backend🟢Node.js Backend⚛️React Frontend💚Vue Frontend🅰️Angular FrontendNext.js📈Business Analyst🎯Product Manager📋Project Manager🎨UI/UX Designer📣Marketing