首页 > CMS > PhpCMS > 正文

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

2024-09-10 07:15:39
字体:
来源:转载
供稿:网友

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

  1. <?php   
  2.    
  3. defined('IN_PHPCMS'or exit('No permission resources.');   
  4.    
  5. //加载表单类form.class.php,‘’空参数表示类文件的路径,加载的系统类库里面的类,参数“0”表示不实例化类   
  6. pc_base::load_sys_class('form');    
  7.    
  8. //判断用户是否登录,未登录就注册   
  9. pc_base::load_app_class('foreground');    
  10.    
  11. //加载数据库类模型 model.class   
  12. pc_base::load_sys_class('model''', 0);   
  13.    
  14. class favorite extends foreground {   
  15.     function __construct() {   
  16.         $this->db = pc_base::load_model('content_model');   
  17.     }   
  18.        
  19.     public function init(){   
  20.         }   
  21.    }   
  22. ?>

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

  1. class foreground {   
  2. public $db$memberinfo;   
  3. private $_member_modelinfo;   
  4.     
  5. public function __construct() {   
  6.     self::check_ip();   
  7.     $this->db = pc_base::load_model('member_model');   
  8.     ...    //Vevb.com 
  9.     ...   
  10. }   
  11. ....   
  12. ....   
  13. }

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类的构造函数如下:

  1. public function __construct()    
  2. {   
  3.     if (!isset($this->db_config[$this->db_setting]))    
  4.    {   
  5.        $this->db_setting = 'default';   
  6.     }   
  7.     $this->table_name = $this->db_config[$this->db_setting]['tablepre'].$this->table_name;   
  8.     $this->db_tablepre = $this->db_config[$this->db_setting]['tablepre'];   
  9.     $this->db = db_factory::get_instance($this->db_config)->get_database($this->db_setting);   
  10. }

1),获取数据库配置(member_model类构造时已经设置相关数据成员).

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

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

  1. final public function select($where = ''$data = '*'$limit = ''$order = ''$group = ''$key='')    
  2. {   
  3.       if (is_array($where)) $where = $this->sqls($where);   
  4.       return $this->db->select($data$this->table_name, $where$limit$order$group$key);   
  5. }

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表