可否自动更改数据库名

#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

#7 jake

具体的在这里:http://speedphp.com/bbs/thread-188-1-1.html

2010-02-27 15:52:48

#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