Dependency Injection 및 Factory 클래스를 사용하려고합니다. 나는 이것을 아주 많이 읽었고 많은 예제를 보았습니다. .. 그러나 나는 (그 이잖아요에 대한 공장 에선 클래스의 제대로 DI를 사용하고 생각하지 않는다공장 및 종속성 인젝션 도움이 필요하십니까
내 데이터베이스를 조회 할 수 아니에요 나는 오류 얻을 :.
Fatal error: Call to undefined method Conn::query()
을
문제는 getRows($sql)
기능에.
내가 제대로 DI를 사용할 수 없었습니다 그것은 PDO
기능을 사용할 수없는 것 같다.
사람이 올바른 방향으로 날 지점 어쩌면 내가 뭘하는지 볼 수 틀렸어?
이것은 지금까지 제 코드입니다. 사용자 클래스 나던 생성자 PHP를 가지고 있기 때문에 당신은 당신의 사용자 생성자 연결 및 ID
return new User(new Conn(), $id);
을 전달하는
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";
}
}
나는 이해합니다. DB 객체를 가져 오려면 어떻게해야합니까? UserDAO 클래스에서'__constructor'를 사용해야합니까? – Steven
@Steven, 당신이 생성자로'__construct()'메소드를 사용하는 것이 좋습니다. 왜냐하면 생성자를보다 분명하게 만듭니다 (클래스의 이름을 잊어 버렸고 생성자임을 쉽게 알지 못합니다). 나중에 클래스 이름을 변경하면 변경되는 코드 줄이 줄어 듭니다. – Nick