可否自动更改数据库名
发布于:2022-01-17 09:50:54
#1 redguan
$spConfig = array(
'db' => array(
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'bbs',
),
库名在这里已经指定。但是实际可能需要对其它库进行操作,例如shop,blog等。如何实现呢?
一、打开MYSQL。PHP文件
构造函数载入$dbconfig 设置。这是一个数组,包含数据库所有信息。所以要在这里之前进行重定义。
二、SP主文件
$GLOBALS['G_SP'] = spConfigReady(require(SP_PATH."/spConfig.php"),$spConfig);
这里是用户APP中的SPCONFIG 复盖 默认的SPCONFIG 设置。生成的是 $GLOBALS['G_SP'] 我们要对这个变量重写。
三、数据库操作属于 MODEL ?
判断正常在SPMODEL。PHP 文件看到构造函数已经加载了 $GLOBALS['G_SP']['db']
如果需要重写,那么只有两种方法。
1、重写 SPMODEL。PHP
2、对$GLOBALS['G_SP']['db']['database'] 重新赋值后,重新实例化?重新加载SPMODEL类?
看到这里暂时停止,希望老大们能够作答。
2010-02-27 10:09:06
#2 jake
实际上异构库的需求,比单纯换个数据库名更常见。
不过这种需求很小几率,SP只支持开发过程中比较大几率的功能。
2010-02-27 10:24:45
#3 redguan
对不起,上面都是一堆废话,一小处更新就可以美完实现。这就是OOP的优越性了。
http://speedphp.com/bbs/viewthread.php?tid=188
2010-02-27 10:57:03
#4 jake
对不起,上面都是一堆废话,一小处更新就可以美完实现。这就是OOP的优越性了。
...
redguan 发表于 2010-2-27 10:57
呵呵,如果是真正用OOP的方法,可以直接在spMode的子类中覆盖构造函数就可以了。
2010-02-27 13:15:07
#5 redguan
呵呵,如果是真正用OOP的方法,可以直接在spMode的子类中覆盖构造函数就可以了。 ...
jake 发表于 2010-2-27 13:15
不太清楚,构造和构析可以覆盖
这样的话真的很方便。
一直用面向过程。对OOP还不是太熟练。
2010-02-27 15:14:07
#6 redguan
实际上异构库的需求,比单纯换个数据库名更常见。
不过这种需求很小几率,SP只支持开发过程中比较大几率的 ...
jake 发表于 2010-2-27 10:24
异构数据库太复杂了。
暂时也不是太依赖。而且又不开源。相关API又多。交给数据库分析师去解决。
一般情况下,主要是多个开源程序之间,能过一个简单的API能实现数据互访就足够了。
2010-02-27 15:18:03
#8 redguan
这个已经实现。
class goods extends spModel
{
public $pk = 'goods_id';
public $table = 'goods';
public $database = 'ecmall';
public $prefix = 'ecm_';
/**
* 构造函数
*/
public function __construct()
{
$GLOBALS['G_SP']['db']['database'] = !empty($this->database) && $this->database!='' ? $this->database : $GLOBALS['G_SP']['db']['database'];
$GLOBALS['G_SP']['db']['prefix'] = !empty($this->prefix) && $this->prefix!='' ? $this->prefix : $GLOBALS['G_SP']['db']['prefix'];
if( null == $this->tbl_name )$this->tbl_name = $GLOBALS['G_SP']['db']['prefix'] . $this->table;
$this->_db = spClass($GLOBALS['G_SP']['db']['driver'], $GLOBALS['G_SP']['db'], $GLOBALS['G_SP']['sp_core_path'].$GLOBALS['G_SP']['db_driver_path']);
}
}
?>
2010-02-27 16:26:14
#9 jake
这个已经实现。
redguan 发表于 2010-2-27 16:26
厉害:victory:
2010-02-27 16:46:45
#10 redguan
厉害不敢当,就是粘贴复制。
类通过继承,OOP的确可以最大限度减少沉余代码。
而面向过程,虽然通过函数也可以减少大量深余代码。但在控制和数据处理上,还是有大量重复的代码。
OOP上目前发现的唯一缺点就是,修改一个子工程(子项目)。需要打开多个文件。
如果在一些大型框架,这个更明显。
同时需要建立一套完整的文档。OOP没有开发文档在身边,基本工作不了。
2010-03-01 11:51:44
#11 jake
厉害不敢当,就是粘贴复制。
类通过继承,OOP的确可以最大限度减少沉余代码。
而面向过程,虽然通过函数 ...
redguan 发表于 2010-3-1 11:51
一般而言都是使用IDE来管理PHP文件。同时,很多IDE也会自带PHP手册还有可以自动获取并提示类的方法和变量。
纯是开发,我个人推荐用netbean,这个IDE很稳定和实用。如果包括系统分析,那么就推荐用EA,enterprise architect。
2010-03-01 12:54:01