Как правильно обращаться к классу из других классов? Всем привет! Помогите понять, правильно ли я делаю аутентификацию и запросы к данным связанным с ней... Пишу на сайте API для приложения и вот встал вопрос с аутентификацией (не путить с авторизацией). Все запросы к API делаются через один файл (скажем index.php) В этом файле создается объект класса Auth (Singleton) который проверяет token и получает данные (ID, Группу, Разрешения для этой группы и т.д.) о текущем пользователе из БД. Дальше проверяется вызванный метод API и подключается необходимый файл (класс) через require_once. И тут проблема. Например, мне нужно проверить может ли пользователь писать комментарии или посты и т.д. И для этого мне нужно сделать проверку в методе $Auth->checkRole('add_comments') из класса AddComment Для того, чтобы обращаться к классу Auth из другого класса, мне приходится в каждом классе, который обращается к классу Auth, в конструкторе, создавать свойство через метод $this->auth = $Auth::getInstance() Ну а дальше понятно, в любом методе класса AddComment я просто обращаюсь к классу Auth через свойство $this->auth как к объекту класса. Правильный ли это подход? Ведь мне нужно практически в каждом классе API обращаться к классу Auth, а значит и в каждый конструктор добавлять эту строку $this->auth = $Auth::getInstance()
Действительно, создание свойства $this->auth в каждом классе API через $Auth::getInstance() в конструкторе может быть не самым оптимальным подходом, так как это может привести к дублированию кода и ухудшить читаемость и поддерживаемость кода.
Вместо этого, рекомендуется использовать Dependency Injection (внедрение зависимостей) для передачи объекта класса Auth в каждый класс, который его использует. Например, можно передавать объект Auth как аргумент при создании экземпляра класса AddComment:
class AddComment { private $auth; public function __construct(Auth $auth) { $this->auth = $auth; } public function someMethod() { // использование $this->auth для доступа к методам Auth } }
Таким образом, при создании экземпляра класса AddComment в Index.php, вы можете передать объект Auth в конструктор:
$auth = $Auth::getInstance(); $addComment = new AddComment($auth);
Это позволит избежать дублирования кода и делает ваш код более гибким и удобным для поддержки и расширения.
Действительно, создание свойства $this->auth в каждом классе API через $Auth::getInstance() в конструкторе может быть не самым оптимальным подходом, так как это может привести к дублированию кода и ухудшить читаемость и поддерживаемость кода.
Вместо этого, рекомендуется использовать Dependency Injection (внедрение зависимостей) для передачи объекта класса Auth в каждый класс, который его использует. Например, можно передавать объект Auth как аргумент при создании экземпляра класса AddComment:
class AddComment {private $auth;
public function __construct(Auth $auth) {
$this->auth = $auth;
}
public function someMethod() {
// использование $this->auth для доступа к методам Auth
}
}
Таким образом, при создании экземпляра класса AddComment в Index.php, вы можете передать объект Auth в конструктор:
$auth = $Auth::getInstance();$addComment = new AddComment($auth);
Это позволит избежать дублирования кода и делает ваш код более гибким и удобным для поддержки и расширения.