用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2554|回复: 1
收起左侧

[HELP] 控制器中载入单例模式的类对象

[复制链接]
发表于 2012-10-5 17:29:21 | 显示全部楼层 |阅读模式
各位大大们,刚刚在学PHP的设计模式,其中有个单元素模式(单例模式),它的实现会把构造函数设成私有或者保护型,这样在控制器里如何去加载呢?
$this->load->model('user');
使用这种方法,它默认会去调用user类的构造函数,于是产生错误
请问应该如何在 CI 框架下使用这种设计模式呢?先谢谢啦~~
PHP复制代码
 
<?Php
 
class User extends CI_Model
{
    private static         $user = null;
    private             $Username;
    private                $Balance;
    private                $TransactoinIndex;
   
    private function __construct($strUsername)
    {
        parent::__construct();
   
        $this->Username         = $strUsername;
       
        // 从数据库加载此用户的资料
        $this->Balance          = 100.00;
        $this->TransactionIndex = 1;
    }
   
    public static function Login($strUsername, $strPassword)
    {
        // 查询数据库,如果用户登陆成功,则创建唯一实例对象
        if ($strUsername == 'Lory' && $strPassword == '123456')
        {
            CUser::$user = new CUser('Lory');
        }
       
        return CUser::$user;
    }
   
    public static function GetUser()
    {
        return CUser::$user;
    }
   
    public function PrintInfo()
    {
        echo "Username: {$this->Username}<br>";
        echo "Balance: {$this->Balance}<br>";
        echo "TransactionIndex: {$this->TransactionIndex}<br>";
    }
}
 
?>
 
复制代码


 楼主| 发表于 2012-10-5 18:05:17 | 显示全部楼层
通过搜索以前的帖子,Hex同学说通过 CI 框架在control, model里通过 $this->load->xxx 的方式加载已经是单例了,于是我做了个实验,确实是如此,感谢~~

这是Model的代码,命名:test.php
PHP复制代码
 
<?Php
 
class Test extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
       
        echo "Constructer is called<br>";
    }
}
 
?>
 
 
复制代码


在控制器中,测试此代码:
PHP复制代码
 
class Welcome extends CI_Controller
{
    public function test()
    {
        $this->load->model('test');
        $this->load->model('test');
    }
}
 
复制代码

然后从浏览器的输出中可以发现,"Constructer is called" 这句话只输出了一次,证明此类的构造函数确实只被调用了一次

本版积分规则