Можно ли вызвать метод другого класса?

Вопрос по сути о dependency injection описано тут https://github.com/codedokode/pasta/blob/master/ar... но у них валидирующий класс class UserValidator у меня же это всего лишь метод...
//Есть класс работы с БД
class DBworker{
  public function CountUsers(){
    //Сходит в БД и скажет есть ли уже такой логин
  }
}
// Есть класс валидации данных
class Validation{
  public function UniqueUsers(){
    //Должен вернуть true / false
  }
}

Суть в том что, метод UniqueUsers никак не сможет выполнить свою задачу без данных из базы. Он должен сам в неё сходить? Запросить что бы метод из класса работы с БД сходил (это возможно вообще и если да, то как это сделать) или надо делать класс работы с БД абстрактным, класс валидатор его потомков и обращаться что-то типа ->parent что бы получить данные?
  • Вопрос задан
  • 165 просмотров
Решения вопроса 2
Ну можно где-нибудь хранить ссылку на инстанс класса базы. И к нему уже обращаться.

Можно и такое решение
public function UniqueUsers()
{
   $count = (new DBworker())->CountUsers();
}
Ответ написан
Думаю через DI будет самое то

<?php
class DBworker
{
    public function countUsers()
    {
        // TODO: реализовать проверку в БД
    }
}

class Validation
{
    private $db; 
    public function __construct(DBWorker $db)
    {
        $this->db = $db;
    }
    public function uniqueUsers()
    {
        $this->db->countUsers();
    }
}


Вы сначала объявляете DI зависимости, потом уже он сам внедряет их, определяя что нужно.
P.S.: почитайте про PSR-2, Вам очень нужно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ipokos
Работу с БД/Моделями можно выносить в singleton
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
07 мая 2024, в 14:11
4000 руб./за проект
07 мая 2024, в 14:10
10000 руб./за проект
07 мая 2024, в 13:57
5000 руб./за проект