CodeIgniter - Шаблон Singleton не разрешен? - PullRequest
2 голосов
/ 22 марта 2011

Я пытаюсь использовать шаблон синглтона в классе, который я создал. Я использую 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 :: __ construct () должен быть открытым (как в классе CI_Model) в /home/.../application/models/rakebacksites.php в строке 29

Ответы [ 3 ]

1 голос
/ 27 мая 2011

Если я правильно помню, CI автоматически создает синглтоны, если вы загружаете через $ this-> load-> model ('Your_model').Очевидно, что все еще можно было бы создать экземпляр напрямую, но тогда ... просто не делайте этого.В качестве альтернативы, не наследуйте от CI_Model.

0 голосов
/ 09 февраля 2013

Создание частного или защищенного конструктора не имеет ничего общего с одноэлементным шаблоном.Все, что вы делаете, это определяете абстрактный класс, который не может быть непосредственно создан.

Чтобы создать синглтон, вам нужно переопределить метод new () или реализовать фабрику классов.

0 голосов
/ 22 марта 2011

Позволяет ли вам объявить конструктор защищенным вместо приватного?Не совсем синглтон, но будет ли это работать для ваших целей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...