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