Підготовка до співбесіди
Що таке Cloud Identity у Laravel 12?
Це нова опція автентифікації в стартових наборах, яка надає корпоративні функції, такі як соціальний вхід, ключі доступу (passkeys) та єдиний вхід (SSO) "з коробки", на базі WorkOS.
Як змінилася вбудована підтримка MongoDB у Laravel 12?
Laravel 12 тепер включає більш надійну, схожу на вбудовану, підтримку MongoDB, що спрощує її використання як основної бази даних з Eloquent та іншими функціями фреймворку.
Який рекомендований спосіб обробки паралелізму в сучасному Laravel (2026)?
Використання фасаду `Concurrency` (представленого в Laravel 11 та доопрацьованого в 12), який дозволяє виконувати кілька завдань паралельно та очікувати на їхні результати, покращуючи продуктивність для операцій, пов’язаних з введенням-виведенням.
Поясніть концепцію "Модульних монолітів" у контексті Laravel 12.
Це архітектурна тенденція, при якій великий додаток Laravel організовується в окремі, слабо пов’язані модулі в межах одного репозиторію. Це забезпечує переваги мікросервісів (розподіл відповідальності) без операційної складності кількох розгортань.
Що таке фасад "Context" у Laravel, і коли його слід використовувати?
Фасад Context (представлений у Laravel 11) дозволяє зберігати та вилучати інформацію, яка зберігається протягом усього життєвого циклу запиту або фонового завдання. Він особливо корисний для логування та трасування, оскільки автоматично прикріплює дані контексту до записів журналу.
Поясніть чотири стовпи об’єктно-орієнтованого програмування (ООП).
Чотири стовпи:\n - **Інкапсуляція:** Поєднання даних (атрибутів) та методів (функцій), які оперують цими даними, в єдиний блок або клас, а також обмеження прямого доступу до деяких компонентів об’єкта.\n - **Успадкування:** Механізм, при якому новий клас (підклас) успадковує властивості та поведінку від існуючого класу (суперкласу), сприяючи повторному використанню коду.\n - **Поліморфізм:** Здатність об’єкта приймати безліч форм. В ООП це дозволяє розглядати об’єкти різних класів як об’єкти загального суперкласу, часто досягається шляхом перевизначення методів або використання інтерфейсів.\n - **Абстракція:** Приховування складних деталей реалізації та показ лише істотних особливостей об’єкта. Вона фокусується на тому, "що" робить об’єкт, а не на тому, "як" він це робить, часто використовуючи абстрактні класи та інтерфейси.
Яка різниця між `interface` та `abstract class` у PHP?
\n - **Interface:** Визначає контракт, якому мають відповідати класи. Він може містити лише сигнатури методів (без реалізації) та константи. Клас може реалізовувати кілька інтерфейсів.\n - **Abstract Class:** Може мати як абстрактні методи (без реалізації), так і конкретні методи (з реалізацією). Він також може мати властивості. Клас може успадковувати лише один абстрактний клас. Абстрактні класи призначені для розширення, а інтерфейси — для реалізації.
Поясніть Трейт (Traits) у PHP і коли їх слід використовувати.
Трейт — це механізм повторного використання коду в мовах з одиночним успадкуванням, таких як PHP. Вони дозволяють класу використовувати методи з кількох трейтів, ефективно імітуючи множинне успадкування поведінки. Трейт корисні для спільного використання загальної функціональності між різними класами, які не мають спільного батька в ієрархії успадкування.
Що таке Впровадження Залежностей (DI) і чому воно важливе в PHP/Laravel?
Впровадження Залежностей — це шаблон проектування, при якому клас отримує свої залежності із зовнішнього джерела, а не створює їх сам. У Laravel він активно використовується через Service Container. Він сприяє слабкій пов’язаності, роблячи код більш модульним, тестованим та підтримуваним. Він також спрощує керування залежностями класів.
Опишіть принципи SOLID в ООП.
SOLID — це абревіатура з п’яти принципів проектування, призначених для того, щоб зробити програмні проекти більш зрозумілими, гнучкими та підтримуваними:\n - **S - Принцип єдиної відповідальності (SRP):** Клас повинен мати лише одну причину для зміни, тобто він повинен мати лише одне завдання або відповідальність.\n - **O - Принцип відкритості/закритості (OCP):** Програмні сутності (класи, модулі, функції тощо) мають бути відкритими для розширення, але закритими для модифікації.\n - **L - Принцип підстановки Барбари Лісков (LSP):** Об’єкти в програмі мають бути замінними екземплярами їхніх підтипів без порушення коректності цієї програми.\n - **I - Принцип розділення інтерфейсу (ISP):** Клієнти не повинні бути змушені залежати від інтерфейсів, які вони не використовують. Безліч специфічних для клієнта інтерфейсів краще, ніж один універсальний інтерфейс.\n - **D - Принцип інверсії залежностей (DIP):** Модулі високого рівня не повинні залежати від модулів низького рівня. Обидва мають залежати від абстракцій. Абстракції не повинні залежати від деталей. Деталі мають залежати від абстракцій.
Поясніть життєвий цикл запиту в Laravel.
Життєвий цикл запиту Laravel починається, коли запит надходить у файл `public/index.php`. Цей файл завантажує автозавантажувач Composer і отримує екземпляр додатка Laravel. Потім HTTP-ядро обробляє запит, пропускаючи його через низку проміжних програм (глобальних, маршрутних та групових) для таких завдань, як автентифікація, захист від CSRF та керування сесіями. Після проміжних програм маршрутизація зіставляє вхідну URL-адресу з певним маршрутом, який відправляє запит у дію контролера або замикання. Контролер обробляє запит, взаємодіє з моделями/сервісами та повертає відповідь. Нарешті, відповідь надсилається назад через HTTP-ядро та проміжні програми, перш ніж бути відправленою користувачеві.
Що таке Eloquent ORM у Laravel і які його переваги?
Eloquent — це вбудований у Laravel Object-Relational Mapper (ORM). Він надає елегантну та активну реалізацію запису для роботи з базами даних. Кожна таблиця бази даних має відповідну "Модель", яка використовується для взаємодії з цією таблицею. Переваги включають:\n - **Виразний синтаксис:** Дозволяє взаємодіяти з базою даних, використовуючи чистий, плинний синтаксис PHP замість чистого SQL.\n - **Відносини:** Легко визначати та керувати відносинами між моделями (один-до-одного, один-до-багатьох, багато-до-багатьох).\n - **Економія часу:** Зменшує обсяг шаблонного коду, необхідного для операцій CRUD.\n - **Підтримуваність:** Робить код більш читабельним, зрозумілим та підтримуваним.
Як Laravel обробляє міграції бази даних?
Міграції Laravel подібні до контролю версій для вашої бази даних, дозволяючи командам легко змінювати та спільно використовувати схему бази даних додатка. Вони забезпечують програмний спосіб визначення структур таблиць бази даних, додавання/видалення стовпців та створення/видалення таблиць. Кожна міграція являє собою клас PHP з методами `up()` та `down()` для застосування та скасування змін відповідно. Команди Artisan (`php artisan migrate`, `php artisan migrate:rollback`) використовуються для керування міграціями.
Яка мета Service Providers у Laravel?
Service Providers є центральним місцем для всього початкового завантаження додатка Laravel. Вони відповідають за прив’язку сервісів до контейнера сервісів Laravel, реєстрацію слухачів подій, проміжних програм і навіть маршрутів. По суті, вони повідомляють Laravel, як завантажувати та налаштовувати різні компоненти вашого додатка. `AppServiceProvider` — це звичайне місце для реєстрації сервісів, специфічних для додатка.
Поясніть концепцію Middleware у Laravel.
Middleware забезпечує зручний механізм для фільтрації HTTP-запитів, що надходять у ваш додаток. Наприклад, Laravel включає проміжну програму, яка перевіряє, чи автентифікований користувач вашого додатка. Якщо користувач не автентифікований, проміжна програма перенаправить його на екран входу. Якщо користувач автентифікований, проміжна програма дозволить запиту продовжити обробку в додатку. Middleware може виконувати завдання до або після обробки запиту додатком.
Що таке шаблонізатор Blade?
Blade — це простий, але потужний шаблонізатор, що входить до складу Laravel. На відміну від інших популярних шаблонізаторів PHP, Blade не обмежує вас у використанні чистого PHP-коду у ваших представленнях. Насправді всі представлення Blade компілюються в чистий PHP-код і кешуються до тих пір, покани вони не будуть змінені, що означає, що Blade практично не додає накладних витрат вашому додатку. Blade надає зручні скорочення для загальних керуючих структур PHP, таких як умовні оператори та цикли, а також успадкування шаблонів.