Библиотека собеса по PHP | вопросы с собеседований
3.15K subscribers
186 photos
6 videos
124 links
Вопросы с собеседований по PHP и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/9f3affba

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Что вы понимаете под Active Record в Yii?

Active Record в Yii — это техника объектно-реляционного отображения (ORM), которая представляет каждую таблицу базы данных в виде PHP-класса, где каждый экземпляр этого класса соответствует строке в таблице. Этот паттерн проектирования упрощает взаимодействие с базой данных, позволяя работать с данными как с объектами, а не писать сырой SQL-код.

Ключевые моменты:

🔸Отображение таблиц в классы: Каждая таблица базы данных имеет соответствующий ей класс Active Record. Например, если у вас есть таблица user, вы можете создать класс User, расширяющий \yii\db\ActiveRecord.

🔸CRUD-операции: Active Record предоставляет встроенные методы для создания, чтения, обновления и удаления записей, что позволяет выполнять эти операции с помощью простого объектно-ориентированного синтаксиса.

🔸Работа с отношениями: Он позволяет определять связи между таблицами (например, один-ко-многим или многие-ко-многим), что облегчает работу с взаимосвязанными данными.

🔸Инкапсуляция бизнес-логики: Вы можете добавлять правила валидации, метки атрибутов и собственные методы в классы Active Record, инкапсулируя бизнес-логику вместе с моделью данных.
🤔1
Что такое абстрактный класс и чем он отличается от интерфейса?

Абстрактный класс в PHP — это класс, на основе которого нельзя создать объект напрямую, а используется только в качестве базового для других классов. Он содержит одну или несколько абстрактных методов, которые должны быть реализованы в классах-наследниках. Абстрактные классы могут также иметь обычные методы с реализацией.

Интерфейс в PHP — это набор абстрактных методов, которые должны быть реализованы всеми классами, которые имплементируют данный интерфейс. Классы могут имплементировать несколько интерфейсов. Интерфейс не содержит переменных или реализации методов, он только определяет сигнатуры методов.

Основные отличия между абстрактным классом и интерфейсом в PHP:

1. Абстрактный класс может иметь переменные и реализацию методов, в то время как интерфейс не может.
2. Класс может наследовать только один абстрактный класс, но имплементировать несколько интерфейсов.
3. Класс, наследующий абстрактный класс, может переопределить его методы или добавить новые методы с реализацией. В случае интерфейса, класс должен реализовать все методы из интерфейса без изменений.
4. Абстрактный класс может содержать поля и методы с любым модификатором доступа, в то время как интерфейс может содержать только публичные методы.
1
Symfony — это фреймворк, основанный на конфигурации или соглашениях?

Symfony — это фреймворк, основанный на соглашениях. Документ Coding Standards иллюстрирует нормы кодирования для проектов Symfony, а также внутренних и сторонних пакетов. Он определяет стандарты кодирования и соглашения, используемые в ядре фреймворка, чтобы сделать его более единообразным и предсказуемым.
Что такое PSR?

PSR в контексте PHP означает «PHP Standards Recommendations» или «Рекомендации по стандартам PHP». PSR — это набор руководящих принципов и рекомендаций, разработанных PHP сообществом, для создания единообразия и согласованности в коде и проектах на PHP.

PSRы определяют стандарты для различных аспектов разработки PHP, таких как структура директорий проекта, автозагрузка классов, стандарты кодирования, интерфейсы HTTP, контейнеры зависимостей и т. д. Они предлагают рекомендации и лучшие практики для этих областей, чтобы обеспечить совместимость между различными библиотеками и фреймворками, а также простоту сопровождения и совместной разработки кода.

Одна из самых известных и широко используемых PSR-рекомендаций — это PSR-4, который определяет правила автозагрузки классов. Согласно PSR-4, классы должны быть организованы в файловой системе в соответствии с определенной структурой директорий, а классы должны иметь пространства имен, соответствующие их местоположению в файловой системе.

Использование PSR-рекомендаций позволяет разработчикам использовать согласованный кодовый стиль и основные стандарты, что делает код более понятным, читаемым и поддерживаемым. Это также способствует доступности и переиспользованию кода, поскольку различные проекты и библиотеки будут соблюдать одни и те же стандарты. В целом, следование PSR-рекомендациям помогает создать экосистему совместимых и качественных проектов на PHP.

Подробнее про PSR на русском здесь
2
Как использовать события и слушателей в Laravel?

События и слушатели в Laravel позволяют следовать за циклом вашего приложения и реагировать на определенные действия или события использовать:

1. Определение событий: События — это простые PHP классы, которые хранятся в директории app/Events. Они сигнализируют о том, что что-то произошло в рамках кода.
2. Определение слушателей: Слушатели — это классы, которые обрабатывают события. Они хранятся в директории app/Listeners. Каждый слушатель отвечает за выполнение действия в ответ на событие.
3. Регистрация событий и слушателей: Вам нужно зарегистрировать ваши события и слушателей в EventServiceProvider. Это делается путем добавления их в массив $listen этого провайдера.
4. Вызов событий: Вы можете вызывать события с помощью вспомогательной функции event или метода dispatch самого события.
5. Обработка события: Когда событие вызывается, Laravel автоматически вызывает зарегистрированных слушателей для этого события.
1
Что такое DDD?

DDD, или Domain-Driven Design (Проектирование с учетом предметной области) — это методология разработки программного обеспечения, которая сосредотачивается на моделировании бизнес-процессов и бизнес-логики в предметной области приложения. Она была предложена Эриком Эвансом в его книге «Domain-Driven Design: Tackling Complexity in the Heart of Software» и предоставляет набор практик и шаблонов для разработки сложных систем.

Основные концепции DDD включают:

Предметная область (Domain):
Предметная область — это ключевой компонент DDD. Это область, на которую направлена разработка, и она описывает бизнес-процессы, правила и логику приложения.

Эксперты предметной области (Domain Experts):
Эксперты предметной области — это люди, обладающие экспертными знаниями в конкретной области бизнеса. В DDD активно взаимодействуют с разработчиками, помогая им понимать сложности предметной области.

Сущности (Entities) и Значения (Value Objects):
Сущности представляют объекты, имеющие уникальный идентификатор, который определяет их в предметной области. Значения — это объекты, описывающие характеристики, которые не имеют своего идентификатора и сравниваются по значению.

Агрегаты (Aggregates):
Агрегаты — это группы связанных сущностей и значений, образующие логически связанные единицы. Агрегаты имеют корень (главную сущность) и инварианты (правила, которые должны соблюдаться внутри агрегата).

Репозитории (Repositories):
Репозитории предоставляют интерфейс для работы с агрегатами и предоставляют методы для поиска и сохранения данных в предметной области.

Сервисы приложения (Application Services) и Фабрики (Factories):
Сервисы приложения — это слой, предоставляющий операции, доступные извне приложения. Фабрики создают сложные объекты, облегчая их создание и инициализацию.
Объясните задачи, выполняемые контроллером, и определите правила для создания методов в контроллере в Symfony?

В Symfony контроллер является важной частью архитектуры MVC (Model-View-Controller). Он отвечает за обработку HTTP-запросов и возврат HTTP-ответов. Ниже мы рассмотрим задачи, выполняемые контроллером, и правила создания методов в нем:

Задачи, выполняемые контроллером Symfony:

1. Прием запросов: Контроллеры начинают работу с приема HTTP-запроса.
2. Выполнение логики приложения: Они содержат логику, которая определяет, что происходит при переходе по URL. Это может быть запрос к базе данных, обработка данных формы или вызов других сервисов.
3. Создание ответов: После обработки запроса контроллеры создают и возвращают объект Response. Этим ответом может быть HTML-страница, JSON, XML, загрузка файла, перенаправление, ошибка 404 или что-либо еще, что приложение должно вернуть клиенту.

Правила создания методов в контроллере Symfony:

✔️Соглашение об именовании: Методы внутри класса контроллера часто называют «действиями». По традиции имена методов заканчиваются на 'Action', хотя в последних версиях Symfony это не является обязательным.
✔️Возвращение ответов: Каждое действие должно возвращать объект Response. Если вы не возвращаете Response напрямую, то, скорее всего, вы используете вспомогательный метод, например $this->render(), который в конечном итоге возвращает Response.
✔️Доступ к сервисам: Контроллеры имеют доступ к контейнеру сервисов, что означает, что вы можете использовать инъекцию зависимостей для доступа к сервисам в ваших методах.
✔️Сопоставление маршрутов: Каждый метод контроллера должен быть сопоставлен с маршрутом. Это можно сделать с помощью аннотаций, YAML, XML или PHP-файлов. Аннотации — это распространенный способ определения маршрутов непосредственно над методами контроллера.
✔️Аргументы метода: Вы можете вводить аргументы в методы контроллера для автоматической инъекции сервисов или параметров, например Request $request или UserInterface $user.
✔️Лучшие практики: Следуйте правилу 5-10-20: определяйте не более 5 переменных, содержите не более 10 действий и включайте не более 20 строк кода в каждое действие.
👍1