phpcmsv9源码学习:数据库model、foreground类
来源:互联网 发布:流星网络电视tv版apk 编辑:程序博客网 时间:2024/05/01 16:00
在PHPCMS二次开发中,PHP页面的代码的开头总要继承很多类,今天对这些类做了一点研究,做个笔记
<span style="font-size:14px;"><?phpdefined('IN_PHPCMS') or exit('No permission resources.');//加载表单类form.class.php,‘’空参数表示类文件的路径,加载的系统类库里面的类,参数“0”表示不实例化类pc_base::load_sys_class('form'); //判断用户是否登录,未登录就注册pc_base::load_app_class('foreground'); //加载数据库类模型 model.classpc_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>
- phpcmsv9源码学习:数据库model、foreground类
- [源码学习] -- yii2源码学习笔记(七) -- model类
- phpcmsv9启动部分源码解析
- Model类源码
- phpcmsv9源码解析 后台登录部分
- phpcmsv9源码解析 我的面板
- [源码学习] -- yii2源码学习笔记(六) -- Behavior和model类
- phpcmsV9站点设置对应数据库表位置
- Django学习06---Model模型(数据库)
- CodeIgniter框架源码学习之模型类--Model.php
- model 数据库
- phpcmsv9源码解析 程序启动部分 系统概述
- django学习8 model类
- PythonWeb开发Django框架学习(九)使用Model类操作数据库数据
- Foreground Estimation Based on Linear Regression Model With Fused Sparsity on Outliers
- 数据库MODEL BLL类实现中的问题
- 从数据库表生成Model类程序
- Model类和数据库的关联
- html Frame
- 服了,写了两篇博客也没人评论,本人打算写小说或者画漫画了,我的csdn是单机吗
- Hive运行架构及配置部署
- hdu 4941 stl的map<node,int>用法
- First
- phpcmsv9源码学习:数据库model、foreground类
- Hibernate中的query.setFirstResult(),query.setMaxResults();
- Android EditText重新获取焦点弹出软键盘,选中内容
- VS添加Ajax
- 正式工作了我也开通个博客!
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- 初试Selenium WebDriver
- 负载均衡技术学习
- QGis(五)矢量图层根据指定字段分级渲染显示