Как получить список пользователей, не нарушив ООП?

Всем привет Интересует такой вопрос:

Есть класс User, в нём реализованы методы add (добавляет юзера в БД), get(получает юзера из бд).

С вызовом проблем нет: создаю экземпляр класса, далее $user->add(параметры); и тд

Возник вопрос: если мне нужно получать всех пользователей из БД, то как это сделать так, чтобы не нарушить ООП?

Если внутри User прописать getAll, то как-то странно, что юзер получает всех юзеров

Возможно, нужно использовать новый класс UserList? Или какие рекомендации в таком случае?


Ответы (1 шт):

Автор решения: Alex Khonko

Если хотите прям совсем по ООП, то как вариант:

class User{

}

class UserCollection
{
    private $users = [];
    public function __construct(... $users)
    {
        foreach ($users as $user)
        {
            if(is_array($user))
            {
                array_walk($user,[$this,'add']);
            }
            else{
                $this->add($user);
            }
        }
    }

    private function add(User $user)
    {
        $this->users[] = $user;
    }
}

interface UserRepositoryInterface{
    public function get(): User;
    public function getAll(): UserCollection;
}

→ Ссылка