Как правильно обращаться к классу из других классов? Всем привет! Помогите понять, правильно ли я делаю аутентификацию и запросы к данным связанным с ней...
Пишу на сайте 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()

21 Авг 2019 в 07:00
143 +1
0
Ответы
1

Действительно, создание свойства $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);

Это позволит избежать дублирования кода и делает ваш код более гибким и удобным для поддержки и расширения.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир