phpcmsv9源码学习:数据库model、foreground类

在PHPCMS二次开发中,PHP页面的代码的开头总要继承很多类,今天对这些类做了一点研究,做个笔记

<span style="font-size:14px;"><?php

defined('IN_PHPCMS') or exit('No permission resources.');

//加载表单类form.class.php,‘’空参数表示类文件的路径,加载的系统类库里面的类,参数“0”表示不实例化类
pc_base::load_sys_class('form'); 

//判断用户是否登录,未登录就注册
pc_base::load_app_class('foreground'); 

//加载数据库类模型 model.class
pc_base::load_sys_class('model', '', 0);

class favorite extends foreground {
	function __construct() {
		$this->db = pc_base::load_model('content_model');
	}
    
	public function init(){
        }
   }
?>
</span>

(1)foreground.class.php在member模块对应的文件夹下, 它定义了一个foreground类, 是index类的基类.代码如下:

<span style="font-size:14px;">class foreground {
public $db, $memberinfo;
private $_member_modelinfo;
 
public function __construct() {
    self::check_ip();
    $this->db = pc_base::load_model('member_model');
    ...
    ...
}
....
....
}</span>
foreground类就只有三个成员和三个方法,其中三个方法分别用来: 初始化数据库, 检测用户是否已经登录(大概是通过cookie中的auth字段进行判断, 木有仔细看, 日后再说), 判断IP是否在禁止列表中.


(2) pc_base::load_model(‘member_model’);

通过pc_base::load_model()加载数据库模型:member_model. 其中pc_base::load_model()方法就是pc_base::load_class()的简单封装, 加载位于C:\www\phpcmsv9\phpcms\model\member_model.class.php的类文件.

member_model.class.php这个文件没多少行代码, 其中有一行pc_base::load_sys_class(‘model’, ”, 0);
这一行加载位于C:\www\phpcmsv9\phpcms\libs\classes\model.class.php的文件.

model.class.php定义了一个model类, model类是所有数据库模型的基类, 比如member_model的基类就是model类.
model封装了一系列数据库操作, 包括但不限于CURD.(当然, 这层封装是是基于phpcmsv9的mysql.class.php等, 后者才是真正地对php提供的数据库api的进行封装.)


model.class.php前面两句如下:

defined('IN_PHPCMS') or exit('Access Denied');

pc_base::load_sys_class('db_factory', '', 0);

通过 load_sys_class(‘db_factory’, ”, 0); 加载db_factory.class.php, 第3个参数0表示不要建立db_factory对象.(因为db_factory是单实例-工厂模式,单实例模式要求该类不能从外部实例化).


model类的构造函数如下:

<span style="font-size:14px;">public function __construct() 
{
    if (!isset($this->db_config[$this->db_setting])) 
   {
       $this->db_setting = 'default';
    }
    $this->table_name = $this->db_config[$this->db_setting]['tablepre'].$this->table_name;
    $this->db_tablepre = $this->db_config[$this->db_setting]['tablepre'];
    $this->db = db_factory::get_instance($this->db_config)->get_database($this->db_setting);
}</span>
1). 获取数据库配置(member_model类构造时已经设置相关数据成员).

2). 调用单实例类db_factory的get_instance建立实例,并由get_database返回一个数据库对象, 并赋值给$this->db这个数据成员.

比如model类的select()方法,单实例模式, 工厂模式都是常用的设计模式.:

<span style="font-size:14px;">final public function select($where = '', $data = '*', $limit = '', $order = '', $group = '', $key='') 
{
      if (is_array($where)) $where = $this->sqls($where);
      return $this->db->select($data, $this->table_name, $where, $limit, $order, $group, $key);
}</span>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值