CSV класс, как связаться с моделью класса - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть класс CSV, который читает, записывает файлы CSV. У меня есть класс модели User, и я хочу метод, который возвращает мне объект User из CSV по ID (getUserById); Поэтому CSV должен возвращать объект класса User. Проблема в том, что я хочу, чтобы CSV возвращал также объекты Book, когда он вызывается из объекта Book.

Я читал о DI и рефлексии, но не понимаю, как его использовать.

class User
{
    private $firstname;
    private $lastname;
    private $username;
    private $password;

    public function __construct($firstname, $lastname, $username, $password)
    {
        $this->firstname = $firstname;
        $this->lastname = $lastname;
        $this->username = $username;
        $this->password = $password;

    }


    public static function getUsers()
    {
       require_once 'CSV.php';
       $csv=new CSV('r',USERS);
       $CSVusers= $csv->getAll();
       $users=array();
       foreach ($CSVusers as $CSVuser){
           $users[]=new User($CSVuser[0],$CSVuser[1],$CSVuser[2],$CSVuser[3],$CSVuser[4],$CSVuser[5],$CSVuser[6]);
       }
       return $users;
    }

    public static function getUserByUsername($username )
    {


       require_once 'CSV.php';
       $csv=new CSV('r',USERS);
       $CSVusers= $csv->getAll();
       $users=array();
       foreach ($CSVusers as $CSVuser){
       $users[]=new User($CSVuser[0],$CSVuser[1],$CSVuser[2],$CSVuser[3]);
       }
        foreach ($users as $user){
            if($user->getUsername()==$username){
                return $user;
            }
        }


    }
}

class CSV
{
    private $handle;
    private $file;

    function __construct($mode,$file) {
        $this->file=$file;
        try {
            $this->handle = fopen($file, "$mode");
        } catch (PDOException $e) {
            exit('Error');
        }
    }

    public function getAll()
    {
        $csv = array();
        //metto tutto il file in un'array
        $lines = file($this->file);

        foreach ($lines as $key => $value)
        {
            $csv[$key] = str_getcsv($value,";");
        }
        fclose($this->handle);
        return $csv;
    }
}

В данный момент я получаю массив от CSV-фола и преобразую его в свой объект в модели, но я не думаю, что это лучшее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...