Библиотека собеса по PHP | вопросы с собеседований
前往频道在 Telegram
Вопросы с собеседований по PHP и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/9f3affba Для обратной связи: @proglibrary_feeedback_bot
显示更多3 151
订阅者
无数据24 小时
-37 天
-430 天
帖子存档
Что такое интерфейсы?
Интерфейсы в PHP являются структурой, которая определяет методы, которые класс должен реализовать. Они предоставляют способ определить общие контракты для классов, не определяя их конкретную реализацию.
Интерфейсы объявляются с использованием ключевого слова
interface и могут содержать только методы без их реализации. Класс, который реализует интерфейс, должен реализовать все методы, определенные в интерфейсе, в противном случае он будет считаться неполным.
Интерфейсы позволяют достичь полиморфизма, что означает, что несколько классов могут реализовывать один и тот же интерфейс и использоваться взаимозаменяемо.
Использование интерфейсов способствует лучшей организации кода, а также повышает его гибкость и переиспользуемость. Они позволяют определить общие методы и стандарты, которые должны быть реализованы в классах, что упрощает сопровождение и расширение программного обеспечения.Что такое Traits?
Трейт очень похож на класс, но предназначен для группирования функционала и его дальнейшего переиспользования во множестве классов, которые не могут быть связаны одним абстрактным классом. Иногда еще говорят, что трейт — это способ реализовать множественное наследование в PHP.
Так как каждый класс может реализовать множество трейтов, могут возникать конфликты когда один и тот же метод реализован в разных трейтах и/или самом классе. Подробней о трейтах в документации.
Вариативная функция - это функция, которая может принимать переменное количество аргументов. Это означает, что ее можно вызывать с различным числом аргументов. В PHP вариативные функции объявляются с помощью оператора
... (также известного как spread-оператор) перед именем аргумента.
Например, вариативная функция может быть объявлена следующим образом(фото 1)
Spread-оператор, также представленный символом ..., выполняет обратную операцию - он распаковывает массив и передает его элементы как аргументы в функцию. Он может использоваться для передачи переменного количества аргументов в функцию или для объединения массивов.
Например, spread-оператор можно использовать следующим образом(фото 2)
В этом примере массив $numbers распаковывается с помощью spread-оператора и его элементы передаются в вариативную функцию sum в качестве отдельных аргументов.Основные принципы ООП
1. Инкапсуляция: принцип, согласно которому объекты должны скрывать свою внутреннюю реализацию и предоставлять только определенный интерфейс для взаимодействия с внешним миром.
2. Наследование: возможность создавать новые классы на основе уже существующих, наследуя их свойства и методы. Это позволяет переиспользовать код и создавать иерархию классов.
3. Полиморфизм: возможность объектов с одинаковым интерфейсом иметь различную реализацию. Он позволяет вызывать один и тот же метод у разных объектов и получать разные результаты в зависимости от типа объекта.
4. Абстракция: процесс выделения общих характеристик и свойств объектов и объединение их в абстрактные классы или интерфейсы. Позволяет скрыть детали реализации и сосредоточиться на важных аспектах объекта.
Как вы понимаете REST?
REST, или Representational State Transfer, это архитектурный стиль для разработки веб-сервисов. Он основан на нескольких принципах, что делает его простым, масштабируемым и гибким для создания и использования веб-сервисов.
REST использует стандартные HTTP-методы, такие как GET, POST, PUT и DELETE, для взаимодействия между клиентом и сервером. Каждая операция выполняется на определенном ресурсе, которому обычно соответствует определенный URL.
REST подчеркивает важность использования существительных в URL-адресах вместо глаголов, что делает URL-адреса понятными и легкими для восприятия. Например, вместо использования "https://example.com/createUser" в REST мы будем использовать "https://example.com/users".
REST также поддерживает концепцию безопасных и идемпотентных операций. Безопасные операции, такие как GET, не должны изменять состояние сервера, а идемпотентные операции, такие как PUT и DELETE, могут быть выполнены несколько раз без изменения конечного результата.
Одним из главных преимуществ REST является то, что он позволяет разделение клиентского приложения и сервера. Клиент может быть реализован на любом языке программирования, которому доступен HTTP, в то время как сервер также может быть написан на любом языке, который может обработать HTTP-запросы.
Какие процессы происходят, когда пользователь вводит в браузере URL?
Когда пользователь вводит URL в браузере, происходит следующая последовательность процессов:
1. Парсинг URL: Браузер анализирует введенный URL, чтобы выделить протокол, доменное имя и путь к ресурсу.
2. DNS-поиск: Браузер отправляет запрос к DNS-серверу для получения IP-адреса, связанного с доменным именем. DNS-сервер возвращает IP-адрес браузеру.
3. Установка TCP-соединения: Браузер устанавливает TCP-соединение с веб-сервером, используя полученный IP-адрес и порт (обычно порт 80 для HTTP или порт 443 для HTTPS).
4. Отправка HTTP-запроса: Браузер отправляет HTTP-запрос на сервер, включая метод запроса (GET, POST и т.д.), заголовки и URI (Uniform Resource Identifier), который содержит запрошенный ресурс.
5. Обработка и выполнение запроса на сервере: Веб-сервер получает HTTP-запрос, выполняет обработку и обращается к соответствующему приложению или файлу. На этом этапе сервер может также взаимодействовать с базой данных или другими серверами для получения данных, необходимых для формирования ответа.
6. Подготовка HTTP-ответа: Сервер формирует HTTP-ответ, включающий статус запроса, заголовки и содержимое. Код состояния (например, 200 для успешного запроса) указывает на результат обработки запроса.
7. Передача HTTP-ответа: Сформированный HTTP-ответ передается обратно по TCP-соединению на браузер клиента.
8. Обработка HTTP-ответа: Браузер получает HTTP-ответ, анализирует статус запроса и заголовки. Если запрос был успешным, браузер начинает загружать и отображать содержимое ответа (HTML, CSS, JavaScript, изображения и т.д.).
9. Рендеринг и отображение: Браузер обрабатывает полученное содержимое, выполняет интерпретацию HTML, применяет стили CSS, обрабатывает скрипты JavaScript и, в конечном итоге, отображает запрошенную веб-страницу на экране пользователя.
Что такое рекурсия?
Рекурсия в программировании - это процесс, когда функция вызывает саму себя для выполнения определенной задачи.
В PHP рекурсия может использоваться для решения задач, которые могут быть разбиты на более простые подзадачи. Когда функция вызывается сама с сокращенными параметрами, она решает подзадачу, а затем вызывает саму себя снова для решения оставшейся части задачи.
Это может быть полезно, например, при обходе древовидных структур данных, алгоритмах перебора и т.д.
Что такое генераторы и как их использовать?
Генераторы в PHP - это специальный тип функций, которые позволяют создавать итерируемые объекты. Они используются для ленивой генерации значений, что позволяет оптимизировать использование памяти.
Генераторы в PHP объявляются с использованием ключевого слова "yield". Они могут быть использованы вместо массивов или циклов для обработки большого количества данных по мере их поступления.
Как передаются переменные (по значению или по ссылке)?
В PHP переменные могут передаваться как по значению, так и по ссылке.
По умолчанию, в PHP переменные передаются по значению. Это означает, что когда переменная передается в функцию или присваивается другой переменной, создается ее копия, и любые изменения, сделанные внутри функции или на другой переменной, не влияют на оригинальную переменную.
Однако, PHP также предоставляет возможность передавать переменные по ссылке, используя символ '&' перед переменной при ее передаче в функцию или присваивании другой переменной. Когда переменная передается по ссылке, функция или другая переменная работают с тем же экземпляром переменной, и изменения внутри функции или на другой переменной отражаются на оригинальной переменной.
Пример передачи переменных по значению:
function increment($num) {
$num++;
}
$number = 5;
increment($number);
echo $number; // Выведет 5, так как переменная $number не изменилась
Пример передачи переменных по ссылке:
function increment(&$num) {
$num++;
}
$number = 5;
increment($number);
echo $number; // Выведет 6, так как переменная $number была изменена по ссылке
В чем разница между =, == и ===?
В PHP операторы "=" (присваивание), "==" (сравнение) и "===" (строгое сравнение) имеют различное поведение:
1. "=" (присваивание): Используется для присваивания значения переменной. Например:
$x = 5; // Переменной $x присваивается значение 5
2. "==" (сравнение): Используется для сравнения значений переменных без учета их типа данных. Если значения переменных равны, то возвращается значение true, иначе - false. Например:
$x = 5;
$y = "5";
if ($x == $y) {
echo "Переменные равны";
} else {
echo "Переменные не равны";
}
В данном примере будет выведено "Переменные равны", так как значения переменных равны, несмотря на то, что они имеют разные типы данных (integer и string).
3. "===" (строгое сравнение): Используется для сравнения значений переменных с учетом их типа данных. Если значения переменных и их типы данных идентичны, то возвращается значение true, иначе - false. Например:
$x = 5;
$y = "5";
if ($x === $y) {
echo "Переменные равны";
} else {
echo "Переменные не равны";
}
В данном примере будет выведено "Переменные не равны", так как значения переменных равны, но их типы данных различаются (integer и string).
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
