Как реализовать правильное подключение классов в 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
229 +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 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир