php单例模式数据库类多次链接数据库该如何优化?

我写了一个mysql数据库操作类,然后对应每个表都写了一个model类,这些model都继承mysql数据库操作类。我的mysql数据库操作类是单例类形式的。昨天调试代码的时候追踪了一下运行流程,发现每个model文件运行的时候都会走一遍完整的mysqlconnectselectdb这些基础性的工作,这完全出乎我的意料,我希望达到的目标是像connectselectdb这种操作只运行一次,其他的每个model实例化的时候都只初始化tablename等一些变量,但是代码改了半天没改对,希望大神们帮忙看看,下面贴代码:
Mysql操作类部分代码:
publicstaticfunctiongetInstance($db='master1',array$config=[]){
$config+=Yaf_Registry::get('config')->database['config'][$db]->toArray();
static$_instance=[];
empty($config['model'])&&$config['model']=get_called_class();
$key=md5(implode(',',$config));
if(empty($_instance[$key])){
$instance=$_instance[$key]=newstatic($config);
return$instance;
}
return$_instance[$key];
}
privatefunction__construct(array&$config){
$this->_initConfig($config);
$this->_initConnection();
$this->_initTable($config);
$this->release();
}
privatefunction_initConfig(array&$config){
!empty($config['host'])&&$this->_config['host']=$config['host'];
!empty($config['user'])&&$this->_config['user']=$config['user'];
!empty($config['pass'])&&$this->_config['pass']=$config['pass'];
!empty($config['data'])&&$this->_config['data']=$config['data'];
!empty($config['port'])&&$this->_config['port']=$config['port'];
!empty($config['char'])&&$this->_config['char']=$config['char'];
!empty($config['pref'])&&$this->_config['pref']=$config['pref'];
in_array($config['dbug'],[0,1])&&$this->_config['dbug']=$config['dbug'];
in_array($config['dlog'],[0,1])&&$this->_config['dlog']=$config['dlog'];
}
privatefunction_initConnection(){
$this->_conn=mysqli_connect(
$this->_config['host'],
$this->_config['user'],
$this->_config['pass'],
$this->_config['data'],
$this->_config['port']
)ordie('connectdbfail('.mysqli_connect_errno().')'.mysqli_connect_error());
mysqli_query($this->_conn,"setnames".$this->_config['char']);
}
model文件代码示例:
classDb_UserModelextendsMySql{......}
问题是每个model文件实例化时候都是通过getInstance,例如:
Db_UserModel::getInstance()
有多少个model被实例化,就会产生多少次数据库链接。
求教如何改成我希望的那样呢?谢谢了。
呼如林
浏览 530回答 2
2回答

慕尼黑8549860

static$_instance=null;if($_instance==null){$_instance=newstatic($config);}return$_instance;

互换的青春

我目前的解决方法是把$_conn变量声明成了静态的了,所有调用$this->_conn都改成了self::_conn,好像达到了我的目的,但不知道有什么弊端没有,望各位大神不吝赐教。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript