场景:一个工厂类,连接不同的数据库,代码如下
class IDatabase
{
static public function factory($name)
{
static $instance = array();
if (!isset($instance[$name])) {
define('APPPATH', ROOT . '/');
define('BASEPATH', dirname(dirname(__FILE__)) . '/lib/');
require_once(ROOT.'/lib/database/DB.php');
require_once(DATADIR.'/db.inc.php');
$db = $database;
$instance[$name] = DB($db[$name]);
}
return $instance[$name];
}
}
$mDb1 = IDatabase::factory('database1');
$mDb2 = IDatabase::factory('database2');
var_dump($mDb1);
var_dump($mDb2);
代码说明:
1、DB.php中代码为模数据库类的初始文件,可无视
2、db.inc.php是配置文件,里面存放二维数组,根据不同一层数组名称取不同配置,代码示意如下
$database['database1']['hostname'] = '127.0.0.1';
$database['database1']['username'] = 'test1';
$database['database1']['password'] = 'test1';
$database['database1']['database'] = 'database1';
...
$database['database2']['hostname'] = '127.0.0.1';
$database['database2']['username'] = 'test2';
$database['database2']['password'] = 'test2';
$database['database2']['database'] = 'database2';
...
3、此时执行代码会打印出,预期$mDb1数据库类,然后有条NOTICE,Notice: “Undefined variable: database”,
这里说明第二次实例化类时,db.inc.php没加载进来,于是试探性的换了require问题就解决了!
(未无待续,下篇将深入研究问题的起因,敬请期待~~)