为什么将所有对数据库的操作不封装到库而是实例化表?

#1 zhijiangch


  • 假如有一个数据库dbtest,里面有多张表
  • //留言表
  • $guestbook = spClass("guestbook");
  • $condition = array('id'=>$id);
  • $result = $guestbook->find($condition);
  • //文章表
  • $article = spClass("article");
  • $condition = array('id'=>$id);
  • $result = $article->find($condition);
  • //...
  • 我是否可以直接实例话数据库,而不必每次操作一个表都实例一次,这样的开销是多了一个$table参数,而实例化表的开销是每个表都要有相应的类文件
  • $dbtest= spClass("dbtest");
  • $condition = array('id'=>$id);
  • $result1 = $dbtest->find('guestbook',$condition);
  • $result1 = $dbtest->find('article',$condition);

也许每张表创建一个类文件更灵活,不过目前没有发现这样的优势

2015-10-15 20:27:27

#2 meieiem

你想实现这样,为什么不就创建一个名字为 db的类,继承spModel  你每次scClass这个类之后,给它指定一下$table 不就可以达到你的要求了吗?

有一些特定的表操作,比如自动验证啥的,并不是通用的

2015-10-16 16:21:21

#3 zhijiangch

那这样的话怎么传值呢?$this->tbl_name = $table,将$table传值给父类中的$tbl_name,有些是可以传递,有些不那么容易,需要修改父类中的成员函数。
既然框架默认是实例化表的方式,肯定有其原因。

2015-10-16 17:21:06

#4 jake

首先,你可以看看spDB,搜索论坛就有,
再有,实例化一个类,开销很微小,变量就更小了。数据库开发最大开销在数据库和网络开销,所以sp用了单例db

2015-10-16 22:40:53

#5 冈刀飞絮

恩,按你所说,那就不要用spClass 就不需要建立model ,直接用spDB 来操作就行。

2015-10-17 00:01:18

#6 zhijiangch

感谢jake, 感谢冈刀飞絮,受益匪浅!

2015-10-18 11:43:17

#7 zhijiangch

听君一席话,胜过干多年工作,大师就是大师,业界精英就是业界精英!{:soso_e179:}

2015-10-18 12:06:42