控制器中载入单例模式的类对象
各位大大们,刚刚在学PHP的设计模式,其中有个单元素模式(单例模式),它的实现会把构造函数设成私有或者保护型,这样在控制器里如何去加载呢?$this->load->model('user');
使用这种方法,它默认会去调用user类的构造函数,于是产生错误
请问应该如何在 CI 框架下使用这种设计模式呢?先谢谢啦~~
<?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>";
}
}
?>
通过搜索以前的帖子,Hex同学说通过 CI 框架在control, model里通过 $this->load->xxx 的方式加载已经是单例了,于是我做了个实验,确实是如此,感谢~~
这是Model的代码,命名:test.php
<?Php
class Test extends CI_Model
{
public function __construct()
{
parent::__construct();
echo "Constructer is called<br>";
}
}
?>
在控制器中,测试此代码:
class Welcome extends CI_Controller
{
public function test()
{
$this->load->model('test');
$this->load->model('test');
}
}
然后从浏览器的输出中可以发现,"Constructer is called" 这句话只输出了一次,证明此类的构造函数确实只被调用了一次
页:
[1]