2011-03-22 7 views
2

내가 만든 클래스에서 싱글 톤 패턴을 사용하려고합니다. 나는 CodeIgniter를 사용하고 있으며, 모든 모델 객체의 생성자를 public으로 요구하는 것으로 보인다.CodeIgniter - 싱글 톤 패턴은 허용되지 않습니까?

이 방법이 있습니까? Singleton 패턴을 사용할 수없는 경우 가장 좋은 방법은 무엇입니까?

나의 등급 :

class RakebackSites extends CI_Model { 

    private $allSites = array(); 

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

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

    private function initAllSites() { 
     $sql = "SELECT * FROM rakeback_sites"; 
     $this->db->query($sql); 
     foreach ($q->result() as $row) { 
      $allSites[] = new RBSite($row->id, $row->name, $row->logo, $row->rakeback, $row->sign_up_bonus, $row->sign_up_bonus_currency, $row->referral_code, $row->id); 
     } 
    } 

    public function getAllSites() { 
     return $this->allSites; 
    } 
} 

그리고 오류가 내가 얻을 :

치명적인 오류 : RakebackSites에 대한 액세스 수준이 :: __ 구조() 공개합니다 홈//에서 (클래스 CI_Model에서와 같이). ../application/models/rakebacksites.php on line 29

답변

1

올바르게 기억한다면 $ this-> load-> model ('Your_model')을 통해로드하면 CI가 효과적으로 자동으로 싱글 톤을 만듭니다. 당연히 직접 인스턴스화하는 것이 가능할 수도 있지만 그럴 수는 없습니다. 또는 CI_Model에서 상속하지 마십시오.

0

생성자를 private 대신 protected로 선언 할 수 있습니까? 정확하게 싱글 톤은 아니지만 여전히 귀하의 목적에 부합합니까?

+0

불행히도, 공개적으로 말해야한다는 –

0

생성자를 private 또는 protected로 만드는 것은 싱글 톤 패턴과 관련이 없습니다. 당신이하는 일은 직접 인스턴스화 할 수없는 추상 클래스를 정의하는 것뿐입니다.

싱글 톤을 생성하려면 new() 메서드를 재정의하거나 클래스 팩터 리를 구현해야합니다.