CodeIgniter - 不允许使用Singleton模式?

时间:2011-03-22 20:13:30

标签: codeigniter singleton

我正在尝试在我创建的类中使用单例模式。我正在使用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;
    }
}

我得到的错误:

致命错误:第29行/home/.../application/models/rakebacksites.php中RakebackSites :: __ construct()的访问级别必须是公共的(如类CI_Model中所示)

3 个答案:

答案 0 :(得分:1)

如果我没记错的话,如果你通过$ this-> load-> model('Your_model')加载,CI会自动有效地创建单身人士。显然,它仍然可以直接实例化,但是......就是不要这样做。或者,不要从CI_Model继承。

答案 1 :(得分:0)

是否允许您将构造函数声明为protected而不是private?不完全单身,但仍然可以用于您的目的吗?

答案 2 :(得分:0)

使构造函数成为私有或受保护与单例模式无关。您所做的只是定义一个无法直接实例化的抽象类。

要生成单例,您需要覆盖new()方法或实现类工厂。