Я пытаюсь использовать Dependency Injection и Factory класс. Я много читал об этом и видел много примеров. Но я не думаю, что правильно использую DI (из класса Facotry для этого материала.
Я не могу запросить свою базу данных. Я получаю ошибку:
Fatal error: Call to undefined method Conn::query()
.
Проблема в функции getRows($sql)
.
Кажется, я не смог правильно использовать DI, и он не может использовать PDO
функции.
Может ли кто-нибудь указать мне правильное направление и, возможно, увидеть, что я делаю не так?
Пока это мой код.
$user = Factory::createUser();
$result = $user->getUsers();
print_r($result);
А вот и все остальные классы:
class Factory {
// I think I'm using Dependency Injection here
function createUser($id = NULL) { return new User(new Conn(), $id); }
}
//Returns PDO conection and that's it.
class Conn {
function config($cfg_file = 'sl.config') {
/* The code here returns $conf array */
}
function Conn() {
$conf = $this->config();
try { return new PDO($conf['dsn'], $conf['user'], $conf['pass']); }
catch (PDOException $e) { echo $e->getMessage(); }
}
}
interface iUser {
public function getSomething();
}
// This is where I do all my SQL queries and return results.
class UserDAO {
private $db = NULL;
private $id;
function UserDAO (&$db, &$id = NULL) {
$this->db = &$db;
$this->id = &$id;;
}
public function getRows($sql)
{
$result = $this->db->query($sql); // <------- THIS IS NOT WORKING
$row = $result->fetch(PDO::FETCH_ASSOC);
return $row;
}
function getUsers($limit = 10) {
$sql ="SELECT * FROM users LIMIT $limit";
return $this->getRows($sql);
}
}
class User extends UserDAO implements iUser {
public function getSomething() {
echo "Something";
}
}