es
Feedback
PHP | Вопросы собесов

PHP | Вопросы собесов

Ir al canal en Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

Mostrar más
2 342
Suscriptores
-224 horas
-67 días
-2530 días
Archivo de publicaciones
🤔 Имеет ли значение регистр заголовка? Нет, не имеет. В HTTP заголовки регистронезависимы. Например, Content-Type, content-type, CONTENT-TYPE — это одно и то же. Но значения заголовков могут быть чувствительны к регистру — зависит от конкретного поля. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что будет если мы цифру 3 int сложим плюсом со строкой 4 что будет? Если в PHP выполнить операцию сложения (+) числа 3 (int) и строки "4" (string), то PHP автоматически приведёт строку "4" к числу, и произойдёт арифметическая операция:
$result = 3 + "4";
echo $result; // 7
🚩Как это работает? PHP видит, что используется оператор +, который применяется только к числам. "4" — это строка, но она содержит только число, поэтому PHP автоматически преобразует её в int. Затем выполняется операция 3 + 4, и результатом будет 7. 🚩Что если строка не является числом? Если строка не является корректным числом, PHP попробует взять из неё число с начала строки. Если в начале строки нет цифр, то строка будет воспринята как 0. Примеры странных случаев
echo 3 + "4abc";  // 7   (строка "4abc" преобразуется в число 4)
echo 3 + "abc4";  // 3   (строка "abc4" преобразуется в 0, т.к. начинается не с цифры)
echo 3 + "0.5";   // 3.5 (строка "0.5" преобразуется в число 0.5)
echo 3 + " ";     // 3   (пробелы преобразуются в 0)
🚩Что если использовать `.` вместо `+`? Если вместо + использовать . (конкатенацию строк), то числа не складываются, а просто соединяются как строки
echo 3 . "4"; // "34" (строка)
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какими способами организовать порции? Разделение данных на порции (batch processing) может быть организовано разными методами: 1. LIMIT и OFFSET – классический способ для пагинации в SQL. 2. Cursor-based pagination – используется в API, позволяет получать новые данные без смещения. 3. Частичная загрузка данных – загружать данные по мере необходимости (lazy loading). 4. Очереди (Message Queues) – например, RabbitMQ или Kafka для обработки данных в потоках. 5. Шардирование данных – разделение больших таблиц на более мелкие логические части. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое ключи в БД? Это специальные поля или комбинации полей, которые используются для идентификации записей и установления связей между таблицами. Ключи играют важную роль в обеспечении целостности и эффективности базы данных. 🚩Виды ключей 🟠Первичный ключ (Primary Key) Это одно или несколько полей, которые однозначно идентифицируют каждую запись в таблице. Он должен быть уникальным и не содержать NULL-значений.
CREATE TABLE students (
    student_id INT PRIMARY KEY,
    name VARCHAR(100),
    age INT
);
🟠Внешний ключ (Foreign Key) Это поле или набор полей в одной таблице, которое указывает на первичный ключ в другой таблице. Внешние ключи используются для установления и обеспечения целостности ссылок между таблицами.
CREATE TABLE courses (
    course_id INT PRIMARY KEY,
    course_name VARCHAR(100)
);

CREATE TABLE enrollments (
    enrollment_id INT PRIMARY KEY,
    student_id INT,
    course_id INT,
    FOREIGN KEY (student_id) REFERENCES students(student_id),
    FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
🟠Кандидатный ключ (Candidate Key) Это поле или комбинация полей, которое может служить уникальным идентификатором для записи в таблице. Таблица может иметь несколько кандидатных ключей, из которых один выбирается как первичный ключ.
CREATE TABLE users (
    user_id INT,
    email VARCHAR(100),
    phone VARCHAR(20),
    PRIMARY KEY (user_id),
    UNIQUE (email),
    UNIQUE (phone)
);
🟠Альтернативный ключ (Alternate Key) Это любой кандидатный ключ, который не выбран в качестве первичного ключа. В примере выше email и phone являются альтернативными ключами, так как user_id выбран как первичный ключ. 🟠Составной ключ (Composite Key) Это ключ, состоящий из двух или более полей, которые вместе уникально идентифицируют запись.
CREATE TABLE order_items (
    order_id INT,
    product_id INT,
    quantity INT,
    PRIMARY KEY (order_id, product_id)
);
🟠Суррогатный ключ (Surrogate Key) Это искусственно созданный ключ, который обычно представляет собой уникальный идентификатор, не имеющий смысла вне контекста базы данных.
CREATE TABLE employees (
    employee_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    department VARCHAR(100)
);
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие есть виды JOIN? Основные типы JOIN в SQL: - INNER JOIN — только совпадающие записи. - LEFT JOIN — все из левой таблицы + совпадающие из правой. - RIGHT JOIN — все из правой таблицы + совпадающие из левой. - FULL OUTER JOIN — все записи из обеих таблиц, где есть совпадения или NULL. - CROSS JOIN — декартово произведение (все комбинации). - SELF JOIN — соединение таблицы с самой собой. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое замыкание? Это функция вместе с окружением, в котором она была создана. Замыкание позволяет функции "запомнить" переменные из внешнего контекста, даже после того, как этот контекст завершил свое выполнение. Это делает замыкания мощным инструментом для создания функций, которые могут работать с данными, доступными во время их создания. 🚩Основные особенности замыканий 🟠Доступ к внешним переменным Функция может использовать переменные из внешнего контекста, в котором она была создана. 🟠Сохранение состояния Замыкания могут сохранять состояние между вызовами. 🟠Инкапсуляция Замыкания могут использоваться для создания частных данных и методов. 🚩Примеры замыканий в различных языках программирования 🟠JavaScript В JavaScript замыкания используются очень часто. Рассмотрим простой пример:
function createCounter() {
    let count = 0; // внешняя переменная

    return function() { // внутренная функция
        count++;
        return count;
    }
}

const counter = createCounter(); // создаем замыкание
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
🟠Python В Python замыкания также поддерживаются:
def create_counter():
    count = 0

    def increment():
        nonlocal count
        count += 1
        return count

    return increment

counter = create_counter()
print(counter())  # 1
print(counter())  # 2
print(counter())  # 3
🟠PHP В PHP замыкания реализуются через анонимные функции и использование use:
function createCounter() {
    $count = 0;

    return function() use (&$count) {
        $count++;
        return $count;
    };
}

$counter = createCounter();
echo $counter(); // 1
echo $counter(); // 2
echo $counter(); // 3
🚩Применение замыканий 🟠Создание фабричных функций Замыкания могут использоваться для создания фабричных функций, которые генерируют другие функции с определенным поведением. 🟠Инкапсуляция Замыкания позволяют скрывать переменные и методы внутри функции, предоставляя интерфейс для взаимодействия с ними. 🟠Обработка событий В языках, таких как JavaScript, замыкания часто используются в обработчиках событий для доступа к контексту, в котором был назначен обработчик. 🟠Мемоизация Замыкания могут использоваться для создания функций, которые запоминают результаты предыдущих вычислений и используют их для ускорения последующих вызовов. Ставь 👍 и забирай 📚 Базу знаний

🤔 Зачем нужен шаблон Builder? Шаблон Builder (Строитель) применяется для поэтапного создания сложных объектов. Он нужен, когда: - Объект имеет много параметров, инициализация которых может быть сложной. - Объект должен создаваться в разных конфигурациях, не загромождая конструктор. - Код становится более читаемым, так как отделяется процесс создания от структуры объекта. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое Rest? Это архитектурный стиль для создания веб-сервисов, который был предложен Роем Филдингом в его докторской диссертации в 2000 году. В его основе лежит принцип использования стандартных HTTP методов (GET, POST, PUT, DELETE и др.) для взаимодействия с ресурсами, представленными в виде URL. 🚩Основные принципы 🟠Адресуемость (Addressability) Каждому ресурсу (например, пользователю, товару) соответствует уникальный URL. 🟠Использование стандартных методов HTTP Использует методы HTTP для выполнения операций с ресурсами. GET: Получение данных. POST: Создание нового ресурса. PUT: Обновление существующего ресурса. DELETE: Удаление ресурса. 🟠Статусность (Statelessness) Каждый запрос к серверу должен содержать всю необходимую информацию для его обработки. Сервер не хранит информацию о состоянии клиента между запросами. 🟠Кэширование (Caching) Ответы от сервера могут кэшироваться, чтобы улучшить производительность и снизить нагрузку на сервер. 🟠Единообразие интерфейса (Uniform Interface) Все взаимодействия между клиентом и сервером стандартизированы, что упрощает интеграцию и взаимодействие между системами. 🚩Примеры 🟠Получение списка пользователей (GET) Запрос
GET /users
Ответ
[
  {"id": 1, "name": "Alice"},
  {"id": 2, "name": "Bob"}
]
🟠Получение информации о конкретном пользователе (GET) Запрос
GET /users/1
Ответ
{
  "id": 1,
  "name": "Alice"
}
🟠Создание нового пользователя (POST) Запрос
POST /users
Content-Type: application/json

{
  "name": "Charlie"
}
Ответ (Успешное создание)
{
  "id": 3,
  "name": "Charlie"
}
🟠Обновление информации о пользователе (PUT) Запрос
PUT /users/1
Content-Type: application/json

{
  "name": "Alice Updated"
}
Ответ
{
  "id": 1,
  "name": "Alice Updated"
}
🟠Удаление пользователя (DELETE) Запрос
DELETE /users/1
Ответ (Успешное удаление)
{
  "message": "User deleted"
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что известно про букву D в SOLID и её связь с интерфейсами? D означает Dependency Inversion Principle — принцип инверсии зависимостей. 1. Модули верхнего уровня не должны зависеть от модулей нижнего уровня, оба должны зависеть от абстракций. 2. В коде это реализуется через интерфейсы: классы работают с интерфейсами, а не с конкретными реализациями. 3. Это упрощает тестирование и замену модулей без изменения основного кода. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Расскажи про фабрики Это шаблон проектирования, который относится к порождающим шаблонам и используется для создания объектов без необходимости указывать точный класс создаваемого объекта. Основная идея фабрики заключается в том, чтобы делегировать создание объектов специальному классу или методу, что упрощает управление кодом и позволяет добиться большей гибкости и расширяемости. 🚩Зачем нужны фабрики? 🟠Инкапсуляция процесса создания объектов Если создание объекта требует сложной логики или конфигурации, фабрика позволяет скрыть эту сложность от остальной части кода. 🟠Снижение зависимости от конкретных классов Вы используете интерфейсы или абстрактные классы вместо конкретных реализаций. Это упрощает замену одного типа объекта на другой. 🟠Гибкость и расширяемость Фабрики позволяют добавлять новые классы без изменения существующего кода. 🚩Типы фабрик 🟠Простая фабрика (Simple Factory) Это метод, который возвращает объект одного из нескольких возможных классов в зависимости от переданных параметров.
   class ShapeFactory {
       public static function createShape(string $type) {
           return match ($type) {
               'circle' => new Circle(),
               'square' => new Square(),
               default => throw new Exception("Unknown shape type"),
           };
       }
   }

   $circle = ShapeFactory::createShape('circle'); // Возвращает объект Circle
   
🟠Фабричный метод (Factory Method) В этом шаблоне создание объекта делегируется подклассам. Основной класс определяет интерфейс для создания объектов, но сам не знает, какие конкретные классы будут созданы.
   interface Logger {
       public function log(string $message);
   }

   class FileLogger implements Logger {
       public function log(string $message) {
           echo "Logging to a file: $message";
       }
   }

   class DatabaseLogger implements Logger {
       public function log(string $message) {
           echo "Logging to a database: $message";
       }
   }

   abstract class LoggerFactory {
       abstract public function createLogger(): Logger;
   }

   class FileLoggerFactory extends LoggerFactory {
       public function createLogger(): Logger {
           return new FileLogger();
       }
   }

   $factory = new FileLoggerFactory();
   $logger = $factory->createLogger();
   $logger->log("Hello World");
   
🟠Абстрактная фабрика (Abstract Factory) Этот шаблон используется для создания семейств взаимосвязанных объектов.
   interface GUIFactory {
       public function createButton(): Button;
       public function createCheckbox(): Checkbox;
   }

   class WindowsFactory implements GUIFactory {
       public function createButton(): Button {
           return new WindowsButton();
       }
       public function createCheckbox(): Checkbox {
           return new WindowsCheckbox();
       }
   }

   class MacOSFactory implements GUIFactory {
       public function createButton(): Button {
           return new MacOSButton();
       }
       public function createCheckbox(): Checkbox {
           return new MacOSCheckbox();
       }
   }

   $factory = new WindowsFactory();
   $button = $factory->createButton();
   $checkbox = $factory->createCheckbox();
   
🚩Как использовать фабрики? Если вы работаете с приложением, где объекты часто меняются, например, в зависимости от окружения (Windows, MacOS). Когда создание объектов сложное и требует дополнительной логики. Когда нужно уменьшить зависимость между модулями. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как устроен Git? Это распределенная система контроля версий (VCS), которая позволяет отслеживать изменения в коде, работать в командах и управлять версиями проекта. Основные компоненты: 1. Рабочая директория (Working Directory) – файлы, с которыми работает разработчик. 2. Index (Staging Area) – подготовленная зона перед коммитом. 3. Локальный репозиторий (Local Repository) – база данных версий на локальном устройстве. 4. Удаленный репозиторий (Remote Repository) – центральное хранилище проекта (GitHub, GitLab, Bitbucket). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что считается хорошо написанным Task`ом? Хорошо написанный Task (задача) должен быть понятным, конкретным и выполнимым. Если задача написана размыто, разработчик потратит больше времени на уточнение деталей, а не на саму работу. 🚩Основные принципы хорошего Task'а 🟠Чёткое и понятное название Плохо: Исправить баг (какой баг? где?) Хорошо: Исправить ошибку расчёта скидки при оформлении заказа 🟠Описание должно отвечать на 3 вопроса: Что нужно сделать? (конкретные действия) Зачем это нужно? (какая проблема решается) Как это проверить? (критерии выполнения) 🟠Минимум абстракции, максимум конкретики Плохо: Добавить авторизацию на сайт Хорошо: Добавить авторизацию через Google OAuth 2.0 для пользователей, чтобы они могли входить через Google-аккаунт 🟠Разбивать задачи на подзадачи (если задача сложная) Например, если задача "Реализовать корзину покупок", то лучше разбить её на: Добавление товаров в корзину Расчёт итоговой суммы Удаление товаров из корзины Оформление заказа 🟠Указывать требования (технические детали, ссылки, макеты, API, форматы данных) Если задача связана с API → указываем эндпоинты. Если UI → прикладываем макеты (Figma, Zeplin). Если есть примеры → добавляем скриншоты. 🟠Добавлять критерии выполнения (Definition of Done, DoD) Плохо: Сделать фильтр по цене Хорошо: Фильтр по цене должен работать в диапазоне от 0 до 100 000, быть интерактивным (ползунок), без перезагрузки страницы. Ставь 👍 и забирай 📚 Базу знаний

Вебинар - "Оптимизация маркетинга с помощью нейросетей!" Хватит «гореть» на рутине! ⚡ Узнайте на бесплатном вебинаре, как ИИ
+1
Вебинар - "Оптимизация маркетинга с помощью нейросетей!" Хватит «гореть» на рутине! ⚡ Узнайте на бесплатном вебинаре, как ИИ сократит вашу рутинную работу на 80%. 📅 10 сентября | 19:00 (МСК) Вы получите практические инструкции, как: - Автоматизировать контент и анализ аудитории - Генерировать креативные идеи за секунды - Создать своего AI-аватара без программирования Для маркетологов, SMM- и контент-специалистов. 💰 Подарок после регистрации: «Гид по созданию цифрового аватара». Превратите ИИ в вашего неутомимого помощника! Зарегистрироваться #реклама 16+ ed.bonnieandslide.com О рекламодателе

🤔 Чем отличается BacktimeTable от Backtime? 1. BacktimeTable может быть структурой данных или таблицей, используемой для хранения промежуточных результатов в задаче обратного отсчёта или обработки данных. 2. Backtime часто означает сам процесс обратного отсчёта или времени ожидания. 3. Различие зависит от контекста: таблица — для хранения, backtime — для логики. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Чем отличается Require от Includ'а? В PHP есть две схожие конструкции для подключения файлов: require и include. Однако между ними есть важные различия. 🟠Основное различие: Ошибки при отсутствии файла require вызывает фатальную ошибку (Fatal Error), если указанный файл не найден или содержит ошибку. Это приведёт к немедленному завершению выполнения скрипта. include вызывает предупреждение (Warning), но код продолжит выполняться дальше.
require 'somefile.php'; // Если файла нет, скрипт завершится с ошибкой
echo "Этот код не выполнится";
Результат (если файла somefile.php нет):
Fatal error: require(): Failed opening 'somefile.php'...
Пример с include
include 'somefile.php'; // Если файла нет, скрипт выдаст предупреждение, но продолжит выполняться
echo "Этот код выполнится";
Результат (если файла somefile.php нет):
Warning: include(somefile.php): failed to open stream...
Этот код выполнится
🟠Использование и рекомендации require используют, когда файл обязателен для работы скрипта (например, файл с настройками или важными функциями). include используют, когда файл необязателен, и его отсутствие не должно прерывать выполнение (например, дополнительный шаблон страницы). 🟠`require_once` и `include_once` Дополнительно существуют require_once и include_once, которые работают аналогично, но не подключают файл повторно, если он уже был подключён.
require_once 'config.php'; // Подключится только один раз, даже если вызвано несколько раз
Ставь 👍 и забирай 📚 Базу знаний

🤔 Сколькими способами можно создать ветку в Git? Создать ветку в Git можно: 1. Командой git branch <имя> – создаст новую ветку. 2. git checkout -b <имя> – создаст и сразу переключится. 3. git switch -c <имя> – альтернатива checkout. 4. В графических интерфейсах (GitKraken, SourceTree) – создание через UI. 5. В удаленном репозитории (GitHub, GitLab) – через web-интерфейс Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как сделать так, чтобы сессии не хранились в файле? Для хранения сессий не в файлах в PHP, можно использовать другие механизмы хранения, такие как базы данных, кэш-сервисы (например, Redis или Memcached) или специализированные хранилища. 🚩Хранение сессий в базе данных 1⃣Создайте таблицу для хранения сессий:
CREATE TABLE sessions (
    id VARCHAR(255) PRIMARY KEY,
    data TEXT,
    last_access TIMESTAMP
);
2⃣Создайте обработчики сессий: Создайте класс для обработки сессий, реализующий интерфейс SessionHandlerInterface.
class DBSessionHandler implements SessionHandlerInterface {
    private $pdo;

    public function __construct(PDO $pdo) {
        $this->pdo = $pdo;
    }

    public function open($savePath, $sessionName) {
        return true;
    }

    public function close() {
        return true;
    }

    public function read($id) {
        $stmt = $this->pdo->prepare("SELECT data FROM sessions WHERE id = :id");
        $stmt->bindParam(':id', $id);
        $stmt->execute();
        $session = $stmt->fetch(PDO::FETCH_ASSOC);
        return $session ? $session['data'] : '';
    }

    public function write($id, $data) {
        $stmt = $this->pdo->prepare("REPLACE INTO sessions (id, data, last_access) VALUES (:id, :data, NOW())");
        $stmt->bindParam(':id', $id);
        $stmt->bindParam(':data', $data);
        return $stmt->execute();
    }

    public function destroy($id) {
        $stmt = $this->pdo->prepare("DELETE FROM sessions WHERE id = :id");
        $stmt->bindParam(':id', $id);
        return $stmt->execute();
    }

    public function gc($maxlifetime) {
        $stmt = $this->pdo->prepare("DELETE FROM sessions WHERE last_access < NOW() - INTERVAL :maxlifetime SECOND");
        $stmt->bindParam(':maxlifetime', $maxlifetime, PDO::PARAM_INT);
        return $stmt->execute();
    }
}
3⃣Инициализация сессий:
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
$handler = new DBSessionHandler($pdo);
session_set_save_handler($handler, true);
session_start();
🚩Хранение сессий в Redis 1⃣Установите расширение `phpredis`Для Ubuntu:
sudo apt-get install php-redis
2⃣Используйте Redis для хранения сессий: Настройте PHP для использования Redis в качестве хранилища сессий, добавив настройки в файл php.ini или в коде.
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
Ставь 👍 и забирай 📚 Базу знаний

🤔 Чем отличается абстрактный класс от интерфейса? Абстрактный класс может содержать как абстрактные методы (без реализации), так и методы с реализацией, в то время как интерфейс не содержит реализации методов до PHP 8. Абстрактный класс может содержать поля и конструкторы, а интерфейс — только сигнатуры методов. Класс может наследовать только один абстрактный класс, но реализовать несколько интерфейсов. Абстрактный класс используется, когда требуется частичная реализация, а интерфейс — для создания контракта. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Зачем нужны паттерны проектирования? Это повторяемые решения типичных задач. Они помогают разработчикам создавать программы, которые легко поддерживать, расширять и модифицировать. Паттерны проектирования упрощают процесс разработки, обеспечивая проверенные способы решения распространенных проблем, что экономит время и силы разработчиков. 🚩Зачем они нужны 🟠Повторяемость и стандартность Паттерны обеспечивают повторяемость решений для часто возникающих задач, что снижает вероятность ошибок и улучшает читабельность кода. 🟠Улучшение коммуникации Использование общепринятых паттернов облегчает коммуникацию между разработчиками. Когда все понимают, что подразумевается под, например, «одиночкой» (singleton), это упрощает обсуждение архитектуры системы. 🟠Повышение качества кода Паттерны проектирования способствуют созданию более структурированного, гибкого и поддерживаемого кода. 🟠Экономия времени и ресурсов Паттерны позволяют не изобретать велосипед, а использовать проверенные решения, что ускоряет процесс разработки. 🚩Как они используются Паттерны проектирования делятся на несколько категорий, каждая из которых решает определенный тип задач: 🟠Порождающие паттерны Эти паттерны касаются создания объектов. Примеры: Singleton, Factory, Builder. 🟠Структурные паттерны Эти паттерны касаются построения структуры больших объектов. Примеры: Adapter, Composite, Decorator. 🟠Поведенческие паттерны Эти паттерны касаются взаимодействия и распределения обязанностей между объектами. Примеры: Observer, Strategy, Command.
class Singleton {
    private static $instance;

    private function __construct() {
        // Закрытый конструктор предотвращает создание объекта через new
    }

    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function someBusinessLogic() {
        // Некоторая бизнес-логика
    }
}

// Использование Singleton
$singleton = Singleton::getInstance();
$singleton->someBusinessLogic();
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как настроить autoload через Composer? Composer предоставляет механизм автоматической загрузки классов (autoload), который позволяет не писать вручную require. Основные шаги: 1. Использовать PSR-4 или PSR-0 – правила именования классов. 2. Настроить autoload в composer.json – указать, какие пространства имен использовать. 3. Выполнить composer dump-autoload – обновить автозагрузку после изменения файлов. 4. Использовать require 'vendor/autoload.php' – подключить автозагрузку в проекте. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний