一、对于db类需要连多个数据库是不是不适合或者没法用单例模式?
二、有一个类文件:a.class.php,里面有个A类,一般使用单例的话都是在这个A类里加上getInstance静态方法,同时__construct构造函数设为私有的。但是线上程序都是直接new的A类,这样改了会影响线上跑的程序。于是我想再创建一个c.a.class.php,代码如下:<?php
include("a.class.php");
class CreA{
static private $_instance = NULL;
private function __construct(){}
static public function getInstance() {
if (is_null(self::$_instance) || !isset(self::$_instance)) {
self::$_instance = new A();
}
return self::$_instance;
}
}
?>对于新的程序要用到a对象的采用CreA::getInstance()单例的方式,请问这种方式是否可行?
三、假如a.class.php这个文件比较大,我在user.class.php里的User类有某几个方法要用到a对象,采用上面的单例模式来调用,那我的c.a.class.php改成如下:<?php
class CreA{
static private $_instance = NULL;
private function __construct(){}
static public function getInstance() {
if (is_null(self::$_instance) || !isset(self::$_instance)) {
include("a.class.php");
self::$_instance = new A();
}
return self::$_instance;
}
}
?>这样是不是更好,还是和上面那样写没有区别?
二、有一个类文件:a.class.php,里面有个A类,一般使用单例的话都是在这个A类里加上getInstance静态方法,同时__construct构造函数设为私有的。但是线上程序都是直接new的A类,这样改了会影响线上跑的程序。于是我想再创建一个c.a.class.php,代码如下:<?php
include("a.class.php");
class CreA{
static private $_instance = NULL;
private function __construct(){}
static public function getInstance() {
if (is_null(self::$_instance) || !isset(self::$_instance)) {
self::$_instance = new A();
}
return self::$_instance;
}
}
?>对于新的程序要用到a对象的采用CreA::getInstance()单例的方式,请问这种方式是否可行?
三、假如a.class.php这个文件比较大,我在user.class.php里的User类有某几个方法要用到a对象,采用上面的单例模式来调用,那我的c.a.class.php改成如下:<?php
class CreA{
static private $_instance = NULL;
private function __construct(){}
static public function getInstance() {
if (is_null(self::$_instance) || !isset(self::$_instance)) {
include("a.class.php");
self::$_instance = new A();
}
return self::$_instance;
}
}
?>这样是不是更好,还是和上面那样写没有区别?
二和三,如果用autoloading的话,可以省掉那句include
"线上程序都是直接new的A类",如果改动不算太大的话,当然还是改掉好,否则新旧两种方式混用,有可能有麻烦
* 数据库连接工厂类
*
* @author Administrator
* @package defaultPackage
*/
class DbFactory{
const CURDATABASE='DataBase';//默认连接Mysql(新增、修改、删除)
const SELDB='DataBase_Rep';//查询数据库
const MSSQL='MSSQL';
public static function &getDbLink($curDataBase='DataBase_Rep'){
$db_config=nul;
$conn=null;
switch ($curDataBase){
case DbFactory::CURDATABASE:
$db_config=new Config_ini_file(INI_FILE,DbFactory::CURDATABASE);
$conn=MySqlDB::getInstance($db_config->DataBase->Db_Host,$db_config->DataBase->Db_Name,$db_config->DataBase->Db_User,$db_config->DataBase->Db_Pwd);
break;
case self::SELDB:
$db_config=new Config_ini_file(INI_FILE,DbFactory::SELDB);
$conn=MySqlDB::getInstance($db_config->DataBase_Rep->Db_Host,$db_config->DataBase_Rep->Db_Name,$db_config->DataBase_Rep->Db_User,$db_config->DataBase_Rep->Db_Pwd);
break;
case self::MSSQL:
$db_config=new Config_ini_file(INI_FILE,DbFactory::MSSQL);
$conn=MsSqlDB::getInstance($db_config->MSSQL->Db_Host,$db_config->MSSQL->Db_Name,$db_config->MSSQL->Db_User,$db_config->MSSQL->Db_Pwd);
break;
default:
$db_config=new Config_ini_file(INI_FILE,DbFactory::SELDB);
$conn=MySqlDB::getInstance($db_config->DataBase_Rep->Db_Host,$db_config->DataBase_Rep->Db_Name,$db_config->DataBase_Rep->Db_User,$db_config->DataBase_Rep->Db_Pwd);
break;
}
return $conn;
}
}
?>
if((self::$_instance instanceof self)&&self::$_instance->_host===$db_host&&self::$_instance->_dbname===$db_name&&self::$_instance->_dbuser===$db_user){
;
}else{
self::$_instance=new self($db_host,$db_name,$db_user,$db_pwd);
}
return self::$_instance;
}