Как реализовать правильное подключение классов в 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 в целях безопасности использовать не хотелось бы (почему небезопасно так и не понял, но замечание в документации пугает) Если есть способ реализовать это безопасно, будет круто.
В этом случае все ваши классы должны находиться в папке classes/ и их неймспейсы должны соответствовать их путям относительно этой папки.
Для подключения классов в проекте RESTful API можно создать папку с классами и автозагрузить их при помощи spl_autoload_register(). При этом каждый класс должен быть в отдельном файле.
После этого вы можете подключать классы в вашем 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.
Вместо использования __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.phprequire '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.