Собеседование PHP охватывает семантику языка, ООП, Laravel или Symfony, MySQL и основы веб-безопасности. Ниже — самые частые вопросы с эталонными ответами.
К каждому вопросу — эталонный ответ, с которым можно сравнить свой.
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 интервью в месяц