2012-01-11 5 views
1

그래서 현재 내 class DATABASE은 연결에 싱글 톤을 사용하며 내 class SQL의 생성자에서 호출됩니다. 그 방법에 접근하기 위해 class SQL을 확장하는 4 개의 다른 클래스가 있습니다. 문제는 자식이 어떤 경우에는 서로 인스턴스화하기 때문에 기본적으로 부모 생성자 (별칭 class SQL)를 호출하기 때문에 여러 개의 class SQL 개체가 생성되는 것이 두렵습니다. 의존성 주입에 대해 읽었지 만, 상황에서 구현할 명확한 방법이 없기 때문에 이것이 내가 생각한 것입니다. 모든 클래스를 class DATABASE까지 확장하고 class SQL 메소드를 정적으로 설정하십시오. 그렇다면 자체 클래스에서 class DATABASE의 싱글 톤 연결을 호출해야합니다.PHP는 부모 클래스가 자식의 다중 인스턴스화를 방지합니까?

class DATABASE { 

    function __construct() { 
     self::getInstance(); 
     /// or DATABASE::getInstance (im not quite positive which way) 
    } 

    public static function getInstance() { 
     if (self::$instance == false) { 
     self::$instance = new DATABASEMANAGER(); 
     } 

     return self::$instance; 
    } 
} 

나는 내가 여러 개체를 생성하고 있지 않다 알고, 모든 클래스가 class DATABASE를 확장하기 때문에,이 방법을 파악하고, 서로를 인스턴스화합니다. 나는 이것이 의미가 있기를 바란다. 그리고 당신이 나를 필요로하면 더 많이 설명 할 수있다. 그러나 이것은 나의 문제에 대한 접근으로서 이후로 만드는 것이냐?

답변

1

다른 방법으로 클래스를 작성한 것 같습니다.이 접근 방식은 제 의견으로는 일관됩니다.

class DATABASE extends DATABASEMANAGER 
{ 
    static $instance; 

    private function __construct() 
    { 
     parent::__construct(); 
    } 

    public static function getInstance() 
    { 
     if (empty(self::$instance)) 
     { 
      self::$instance = new self(); 
     } 

     return self::$instance; 
    } 
} 

사용법 :

class Blog 
{ 
    public function __construct() 
    { 
     $this->database = DATABASE::getInstance(); 
    } 

    public function getRecord($id) 
    { 

     $result = $this->database->query("SELECT * FROM blog WHERE id='{$id}'"); 
     //or 
     $result = DATABASE::getInstance()->query("SELECT * FROM blog WHERE id='{$id}'"); 

     //other actions... 
    } 
} 
+0

은 내가 당신이 얻고있는 것을 볼 생각합니다. 그래서 모든 수업은 데이터베이스를 확장 할 것입니다. DATABASEMANAGER는 실제 데이터베이스에 대한 연결 개체를 포함하며 확장 클래스의 단독 개체 (singleton)로 인해 한 번 인스턴스화됩니다. 참된?? – Naterade

+0

실제로 확장되지 않습니다, 나는 모든 클래스가 단일 데이터베이스 인스턴스를 사용할 수있을 것이라고 말하고 싶습니다. – Nazariy

+0

나는 당신의 접근 방식을 좋아한다, 고마워! – Naterade

관련 문제