Как реализовать правильное подключение классов в PHP проекте? Проект - RESTfull API.
Используется роутер, функции классов вызваются примерно так (Slim framework):class Foo {
public function bar ($request, $response, $args) {
echo "Test";
}
}
// GET '/foo/bar'
$app->get('foo/bar', '\Foo:bar');
Классов очень много. Как их правильно подключать? Просто заинклудить все в index.php, думаю будет неправильно..
__autoload в целях безопасности использовать не хотелось бы (почему небезопасно так и не понял, но замечание в документации пугает) Если есть способ реализовать это безопасно, будет круто.

21 Авг 2019 в 07:05
192 +1
0
Ответы
1

Вместо использования __autoload можно использовать более современную и безопасную функцию spl_autoload_register() для автозагрузки классов. Например:

spl_autoload_register(function ($class) {
$class = str_replace('\\', '/', $class);
require_once __DIR__ . '/classes/' . $class . '.php';
});

В этом случае все ваши классы должны находиться в папке classes/ и их неймспейсы должны соответствовать их путям относительно этой папки.

Для подключения классов в проекте RESTful API можно создать папку с классами и автозагрузить их при помощи spl_autoload_register(). При этом каждый класс должен быть в отдельном файле.

Пример файловой структуры проекта:

- index.php
- classes/
- Foo.php
- Bar.php
- ...

Пример автозагрузчика для классов:

spl_autoload_register(function ($class) {
$file = __DIR__ . '/classes/' . str_replace('\\', '/', $class) . '.php';
if (file_exists($file)) {
require_once $file;
}
});

После этого вы можете подключать классы в вашем index.php и использовать их в роутах:

// index.php
require 'vendor/autoload.php'; // подключение зависимостей
require 'autoload.php'; // автозагрузчик классов
// Создание экземпляра класса Foo
$foo = new Foo();
// Роут для вызова метода bar() класса Foo
$app->get('/foo/bar', function ($request, $response, $args) use ($foo) {
return $foo->bar($request, $response, $args);
});

Таким образом, вы можете эффективно организовать структуру проекта и правильно подключать классы без обращения к __autoload.

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир