Співбесіда 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 інтерв'ю на місяць