У меня есть класс 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-фола и преобразую его в свой объект в модели, но я не думаю, что это лучшее решение.